使用insertWithOnConflict进行更新或插入

时间:2014-03-25 19:31:05

标签: android sqlite where-clause insert-update

我需要插入或更新,我找到了SQLiteDatabase的insertWithOnConflict方法,但我不知道它是如何检查该条目是否已经存在。

理论上我需要一个“Where”参数来检查某个ID是否存在,如果存在,它应该替换所有其他列。

这就是我现在所拥有的,但我不认为第二个参数是唯一的id

    ContentValues args = new ContentValues();
    args.put(AppDatabase.COLUMN_ID, entry.getId());
    args.put(AppDatabase.COLUMN_NAME, entry.getAppname());
    args.put(AppDatabase.COLUMN_URL, entry.getAppUrl());
    database.insertWithOnConflict(AppDatabase.TABLE_FILELIST, COLUMN_ID, args, SQLiteDatabase.CONFLICT_REPLACE);

如何管理此行为?

1 个答案:

答案 0 :(得分:8)

  1. 确保您的表格中有一些适当的约束,例如PRIMARY KEYUNIQUE

  2. 插入时,通过ContentValues向此约束列添加值。如果插入新行会违反某些约束,则首先删除冲突的行,然后插入新行。

  3. 在您的情况下,COLUMN_ID看起来是PRIMARY KEY约束的良好候选者。您的代码中第二个arg nullColumnHackCOLUMN_ID不是必需的,您可以将其作为null传递。