2012-12-06 33 views
-1

編輯: 我找到了一個解決方案。顯然,如果我把「_id」作爲nullColumnHack in db.insertAndroid - SQLite整數主鍵不被添加

dbSave.insert(db.getTable(), "_id", values); 

然後它就起作用了。有人可以解釋爲什麼嗎?

我在我的應用程序中有一個數據庫。文本字段工作得很好,我可以寫和檢索他們沒有問題。但是,我的ID列是一個「整數主鍵」不會被添加到數據庫中。

這裏是我的DBHelper的onCreate

public void onCreate(SQLiteDatabase db) { 
    String CREATE_PASS_TABLE = "CREATE TABLE " + TABLE_PASS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_USE + " TEXT," 
      + KEY_PASS + " TEXT" + ")"; 
    db.execSQL(CREATE_PASS_TABLE); 

} 

獨立的類,在那裏我將值添加到DB:

private void saveToDB() { 

    SQLiteDatabase dbSave = db.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 


    values.put(db.getKeyUse(), edtUse.getText().toString()); 
    values.put(db.getKeyPass(), edtPassToSave.getText().toString()); 

    dbSave.insert(db.getTable(), null, values); 
    dbSave.close(); 
    dialog.dismiss(); 
} 

,這是我檢索記錄。

private List<Passwords> getPasswords() { 
    List<Passwords> passwordList = new ArrayList<Passwords>(); 

    String selectQuery = "SELECT * FROM " + dbHelp.getTable(); 
    SQLiteDatabase db = dbHelp.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 


    if (cursor.moveToFirst()) { 
     do { 
      Passwords password = new Passwords(); 

      Toast.makeText(getApplicationContext(), cursor.getString(0), Toast.LENGTH_SHORT).show(); 
      //password.setId(Integer.parseInt(cursor.getString(0))); 
      password.setUse(cursor.getString(1)); 
      password.setPass(cursor.getString(2)); 

      passwordList.add(password); 
     } while (cursor.moveToNext()); 
    } 

    return passwordList; 

} 

但是,當我嘗試獲取ID並將其解析爲一個int我得到一個nullPointerException。當我用Toast檢查ID值時,每一個都是空白的。發生了什麼,如何解決?

+0

logcat的日誌和地步,你得到錯誤... – Selvin

回答

0

如果不明確地把一個值的ID你或許應該將其設置爲自動增量:

public void onCreate(SQLiteDatabase db) { 
    String CREATE_PASS_TABLE = "CREATE TABLE " + TABLE_PASS + "(" 
     + KEY_ID + " INTEGER PRIMARY KEY NOT NULL AUTOINCREMENT, " + KEY_USE + " TEXT," 
     + KEY_PASS + " TEXT" + ")"; 
    db.execSQL(CREATE_PASS_TABLE); 
} 
+0

我後來檢查了這一點並讓你知道這是否也適用。不過,我在SQLite文檔中讀到,您不需要指定AUTOINCREMENT。 – Pztar