-1

编辑: 我找到了解决方案。显然,如果我将“_id”作为 db.insert 中的 nullColumnHack

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);

}

我将值添加到数据库的单独类:

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 值时,每个都是空白的。发生了什么事,我该如何解决?

4

1 回答 1

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);
}
于 2012-12-06T17:06:13.580 回答