-1

編集: 私は解決策を見つけました。どうやら、db.insertのnullColumnHackとして「_id」を入れた場合

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

その後、それは動作します。誰かが理由を説明できますか?

アプリケーションにDBがあります。テキストフィールドは問題なく機能し、問題なく書き込みと取得ができます。ただし、「整数主キー」であるID列がデータベースに追加されません。

これが私のDBHelperonCreateです

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が発生します。トーストで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 に答える