插入唯一字段时无法从autoincrement id停止表

时间:2013-07-01 08:53:06

标签: android sqlite

我有一个包含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_IGNORECONFLICT_ABORTCONFLICT_ROLLBACK

我需要这个的原因是因为其他表在这个id上有一个外键,因此如果id被更改,另一个表就无法指向。

我如何才能让现有的条目不受影响?

1 个答案:

答案 0 :(得分: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_FOO调用此方法。如果发生异常,此方法将return 1(如果您尝试插入唯一值),如果事务成功,它将return 0

我希望这种方式会对你有所帮助。如果有任何问题,请告诉我。