将数据插入约束失败的SQLite表
我正在尝试将数据插入到Android上的SQLite表中。 _id
是表的主键,我使用此方法插入一行:
public void addSomeData(int id, String datetime) {
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_ID, id);
contentValues.put(KEY_DATETIME, datetime);
mDb.insert(TABLE, null, contentValues);
}
我得到的问题是,有时主键约束被验证,我想使用像INSERT IF NOT EXISTS
这样的东西,但最好是与ContentValues
一起使用的东西。我有什么选择?我了解insertOrThrow()
和insertWithOnConflict()
方法只返回不同的值,或者我应该使用其中一种方法吗?
答案 0 :(得分:1)
将insertWithOnConflict()
与CONFLICT_IGNORE
一起使用。
将返回新行或现有行的ROWID /主键,-1表示任何错误。
答案 1 :(得分:0)
在我的情况下,“约束失败”的发生是因为我有一些彼此依赖的表。至于“如果不存在则插入”,您可以使用此ID进行查询,并检查光标的计数是否大于零。检查我已在我的应用中使用的方法。
public boolean isRowExists(long rowId) {
Cursor cursor = database.query(this.tableName, this.columns, DBSQLiteHelper.COLUMN_ID + " = ? ", new String[] { "" + rowId }, null, null, null);
int numOfRows = cursor.getCount();
cursor.close();
return (numOfRows > 0) ? true : false;
}
答案 2 :(得分:0)
这样做你可以简单地查询数据库以查看是否存在具有该键的行,并且只有在查询没有返回数据时才插入新行。