2014-11-22 6 views
1

서버에서 JSONObject로 데이터를 가져와 내 테이블에 저장하고 있습니다.Android : Sqlite 오류 - (1) "null"근처 : 구문 오류

다음 오류가 발생했습니다.

11-22 02 : 18 : 35.489 : E/AndroidRuntime (2597) android.database.sqlite.SQLiteException : 근처 "NULL"구문 오류 (코드 1)의 컴파일 동안, 표를 작성 Conntact (null INTEGER PRIMARY KEY AUTOINCREMENT, null TEXT, null TEXT, null TEXT, null TEXT, null TEXT, null TEXT);

for(int i=0;i<contactdata.length();i++) 
     { 
      JSONObject cont = contactdata.getJSONObject(i); 
      String con_id = getValue(cont, "id"); 
      System.out.println("contactid"+con_id); 
      String first_name = getValue(cont, "first_name"); 
      String last_name = getValue(cont, "last_name"); 
      String short_name = getValue(cont, "short_name"); 
      String pid = getValue(cont, "pid"); 
      String cid = getValue(cont, "cid"); 
      String number = getValue(cont, "914424411295"); 
      Conntact con = new Conntact(getActivity()); 
      con.insertValues(con_id, short_name, first_name, last_name, number, pid, cid); 
      Toast.makeText(ctx, "contact inside", Toast.LENGTH_SHORT).show(); 
     } 

이 내 Conntact 클래스입니다

public class Conntact { 

public Conntact() { 

    // TODO Auto-generated constructor stub 
} 
static SQLiteDatabase db; 
static ContactDB dedb; 
public Conntact(Context context) 
{ 
    dedb = new ContactDB(context); 
} 
public static SQLiteDatabase open() 
{ 
    return dedb.getWritableDatabase(); 
} 
public void close() 
{ 
    dedb.close(); 
} 
public void insertValues(String con_id, String short_name,String first_name,String last_name,String pid,String cid,String number) 
{ 
    db = open(); 
    ContentValues values = new ContentValues(); 
    values.put(ContactDB.con_id, con_id); 
    values.put(ContactDB.short_name, short_name); 
    values.put(ContactDB.first_name, first_name); 
    values.put(ContactDB.last_name, last_name); 
    values.put(ContactDB.pid, pid); 
    values.put(ContactDB.cid, cid); 
    values.put(ContactDB.number, number); 
    db.insert(ContactDB.TABLE_NAME, null, values); 
    this.close(); 
} 

public ArrayList<String> getValues() 
{ 
    ArrayList<String> names = new ArrayList<String>(); 
    db = open(); 
    String query = "select * from "+ContactDB.TABLE_NAME; 
    Cursor cursor = db.rawQuery(query, null); 
    if(cursor.moveToFirst()) 
    { 
     do{ 
      names.add(cursor.getString(cursor.getColumnIndex(ContactDB.con_id))); 
      names.add(cursor.getString(cursor.getColumnIndex(ContactDB.number))); 
      names.add(cursor.getString(cursor.getColumnIndex(ContactDB.first_name))); 
      names.add(cursor.getString(cursor.getColumnIndex(ContactDB.last_name))); 
      names.add(cursor.getString(cursor.getColumnIndex(ContactDB.short_name)));; 
      names.add(cursor.getString(cursor.getColumnIndex(ContactDB.pid)));; 
      //names.add(cursor.get) 
     }while(cursor.moveToNext()); 
    } 
    return names; 

} 
public static boolean isAvailable(String number) 
{ 
    db = open(); 
    String query = "select * from"+ContactDB.TABLE_NAME+"where"+ContactDB.number+"="+number; 
    Cursor c =db.rawQuery(query, null); 
    if(c==null) 
    { 
     return false; 
    }else 
    return true; 
} 
} 

이 내 ContactDB 클래스

내가 실수를 한 곳 모르겠어요
public class ContactDB extends SQLiteOpenHelper{ 
public static final String DATABASE_NAME = "AA_DB_NAME"; 
public static final String TABLE_NAME = "Conntact"; 
public static final int VERSION = 1; 
public ContactDB(Context context) { 
    super(context, DATABASE_NAME, null, VERSION); 
    // TODO Auto-generated constructor stub 
} 

public static String con_id; 
public static String short_name; 
public static String first_name; 
public static String last_name; 
public static String pid; 
public static String cid; 
public static String number; 
public static String CREATE_QUERY = "create table "+TABLE_NAME+" ("+con_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+short_name+" TEXT, "+first_name+" TEXT, "+last_name+" TEXT, "+pid+" TEXT, "+cid+" TEXT, "+number+" TEXT);"; 
@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL(CREATE_QUERY); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    db.execSQL("DROP TABLE "+TABLE_NAME+" IF NOT EXISTS"); 
} 

} 

입니다. 내가 잘못 들어간다면 제발 도와주세요.

+1

"ContactDB"클래스의'public static String'에 값을 할당해야합니다. 또한 '최종'으로 만들어야합니다. –

답변

1

앞서 언급했듯이 클래스의 public static String에 값을 할당해야합니다. 실수로 수정되지 않도록하려면 final으로 지정해야합니다.

public static final String con_id = "con_id"; 
public static final String short_name = "short_name"; 
public static final String first_name = "first_name"; 
public static final String last_name = "last_name"; 
public static final String pid = "pid"; 
public static final String cid = "cid"; 
public static final String number = "number"; 
0
public static String CREATE_QUERY = "create table "+TABLE_NAME+" ("+con_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+short_name+" TEXT, "+first_name+" TEXT, "+last_name+" TEXT, "+pid+" TEXT, "+cid+" TEXT, "+number+" TEXT);"; 

당신의 con_id는 gettint 널 (null) 값입니다. "id"와 같이 하드 코딩 된 문자열을 사용할 수 있습니다.