0

我有一个包含 2 列、一个数字 ID 和唯一文本的表。像这样创建:

String CREATE_MY_TABLE = "CREATE TABLE " + TABLE_TEST + "("
        + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," 
        + KEY_FOO + " TEXT UNIQUE" 
        + ")";
db.execSQL(CREATE_MY_TABLE);

我希望当我插入 KEY_FOO 值并且它已经在数据库中时,什么都不会发生。但我得到的是 id 总是递增的。没有插入新行,这很好,但 id 是自动递增的。

我正在做的插入如下:

db.insertWithOnConflict(TABLE_TEST , null, values, SQLiteDatabase.CONFLICT_NONE);

我试过了CONFLICT_IGNORE,,,CONFLICT_ABORTCONFLICT_ROLLBACK一样。

我需要这个的原因是因为其他表在这个 id 上有一个外键,因此如果 id 改变了,其他表就无处可去。

我怎么说让现有的条目保持不变?

4

1 回答 1

0

试试这个方法。在您的 dbhelper 类中编写如下插入的方法。

public int insertData(String desc) {

    db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    try {
        db.beginTransaction();
        cv.put(KEY_FOO, desc);          
        db.insertOrThrow(TABLE_TEST, null, cv);
        db.setTransactionSuccessful();

    } catch (Exception ex) {
        return 1;
    } finally {
        db.endTransaction();
        db.close();
    }
    return 0;
}

然后从您的活动中使用参数值调用此方法KEY_FOOreturn 1如果发生异常(如果您尝试插入唯一值),则此方法将return 0在事务成功时执行。

我希望这种方式对你有帮助。让我知道是否有任何问题。

于 2013-07-01T09:03:31.637 回答