2013-02-13 6 views
0

에 데이터를 삽입 할 수 없습니다 데이터 안드로이드 : SQLite는

package com.example.esoftcallmanager; 

import android.app.Activity; 
import android.content.Context; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.widget.Toast; 

public class DatabaseHandler implements DatabaseConnector 
{ 
    private SQLiteDatabase database; 
    private String dbPath = "data//data//com.example.esoftcallmanager.sqllite//esoftDatabase"; 
    private static Context context; 

    private static DatabaseHandler instance; 

    private DatabaseHandler(Context context) 
    { 
     this.context = context; 
    } 

    @Override 
    public void createConnection() 
    { 

     try 
     { 
      database = context.openOrCreateDatabase("esoftDatabase", Context.MODE_PRIVATE, null); 

      String createDatabaseQuery = "create table BranchNetwork(" + 
        "brID integer primary key autoincrement," 
        +"city text," 
        +"streetAddress text," 
        +"phoneNumber1 text," 
        +"phoneNumber2 text," 
        +"email text" 
        +");"; 

      String dropDatabaseQuery = "drop table BranchNetwork"; 
      database.execSQL(createDatabaseQuery); 


     } 
     catch(SQLException sql) 
     { 
      Toast.makeText(context, sql.getMessage(), Toast.LENGTH_LONG).show(); 
     } 

    } 

    @Override 
    public void closeConnection() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public String getPhoneNumber() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public static DatabaseHandler getInstance(Context context) 
    { 
     if(instance==null) 
     { 
      instance = new DatabaseHandler(context); 
     } 

     return instance; 
    } 

    public static DatabaseHandler getInstance() 
    { 
     if(instance==null) 
     { 
      instance = new DatabaseHandler(context); 
     } 

     return instance; 
    } 

    @Override 
    public String insertData(String city, String streetAddress,String phoneNumber1, String phoneNumber2, String email) 
    { 
     String insertQuery = "insert into BranchNetwork ('city','streetAddress','phoneNumber1','phoneNumber2','email') values("+city+","+streetAddress+","+phoneNumber1+","+phoneNumber2+","+email+");"; 

     try 
     { 
      database.execSQL(insertQuery); 
      return "Data Successfully Inserted"; 
     } 
     catch(Exception e) 
     { 
      Toast.makeText(context, "Exception: "+e.getMessage(), Toast.LENGTH_LONG).show(); 
      return "Data Insertion Failed"; 
     } 

    } 


} 

내가 데이터를 삽입 할 때마다

, 나는 다음과 같은 오류를 삽입

코드 다음 코드에서 참조하시기 바랍니다

02-13 23:39:40.424: E/Database(655): Failure 1 (near "@wewe": syntax error) on 0x2a6128 when preparing 'insert into BranchNetwork ('city','streetAddress','phoneNumber1','phoneNumber2','email') values(asas,asasd,3434,3434,[email protected]);'. 

무엇이 잘못 되었나요? 어떻게 해결할 수 있습니까? 도와주세요!

답변

2

간단히 말해 문자열을 따옴표로 묶어야합니다. SQLiteDatabase#insert()

+0

비록 작동하지만 원시 쿼리를 사용하여 데이터를 삽입하면 안됩니다. 원시 쿼리는 최후의 수단 일뿐입니다. – WarrenFaith

+0

감사합니다! 이것을 해결 된 것으로 표시하십시오! –

+0

기꺼이 도와 드리겠습니다! 다른 누군가가 동의하지 않고 나에게 downvote ...을 준 것은 수치 다. .. 오 잘. – Sam

2
처럼

db.rawQuery("insert into Foo (bar) values (?)", new String[] {city}); 

또는 사용하는 기본 방법 :

"values('"+city+"','"+streetAddress+"'..." 

그러나, 원시 값으로 작업 할 때 SQL injection attacks 및 기타 불미스러운 일을 방지하기 위해 매개 변수화 된 쿼리를 사용하는 것이 더 좋다

이 SQL 문을 사용해보십시오.

String insertQuery = "INSERT INTO BranchNetwork ('city','streetAddress','phoneNumber1','phoneNumber2','email') VALUES('"+city+"','"+streetAddress+"','"+phoneNumber1+"','"+phoneNumber2+"','"+email+"');"; 

이 종류의 SQL 문을 사용할 때 '과 관련된 문제가 자주 발생합니다.

삽입/업데이트/삭제에도 ContentValues을 사용할 수 있습니다. 나는 그것을 좋아하는 SQL 문을 쓰는 대신에 선호한다. 귀하의 상황에서 당신은이 작업을 수행 할 수 있습니다

ContentValues values = new ContentValues(); 
values.put("city", city); 
values.put("streetAddress",streetAddress); 
values.put("phoneNumber1",phoneNumber1); // and ETC. 
//INSERT 
sqliteDb.insert("BranchNetwork", null, values); 
+0

좋아요! 다른 방법을 알려 주셔서 감사합니다! +1! –

2

다음은 작동하지 않습니다

String insertQuery = "insert into BranchNetwork ('city','streetAddress','phoneNumber1','phoneNumber2','email') values("+city+","+streetAddress+","+phoneNumber1+","+phoneNumber2+","+email+");"; 

당신은 대신 자신의 삽입 SQL을 만들 ContentValues을 사용하고 바로 삽입하는 그런 일을 사용하지 않아야합니다 :

db.insert(TABLENAME, null, cv); 
+0

다른 접근 방식을 제공해 주셔서 감사합니다. +1! –