我有一个包含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_ABORT
,CONFLICT_ROLLBACK
。
我需要这个的原因是因为其他表在这个id上有一个外键,因此如果id被更改,另一个表就无法指向。
我如何才能让现有的条目不受影响?
答案 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
。
我希望这种方式会对你有所帮助。如果有任何问题,请告诉我。