在约束失败的情况下将数据插入SQLite表

时间:2013-12-12 16:43:12

标签: android sqlite constraints

将数据插入约束失败的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()方法只返回不同的值,或者我应该使用其中一种方法吗?

3 个答案:

答案 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)

这样做你可以简单地查询数据库以查看是否存在具有该键的行,并且只有在查询没有返回数据时才插入新行。