使用insertWithOnConflict进行更新或插入

Mar*_*ies 8 sqlite android insert-update where-clause

我需要插入或更新,我发现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);
Run Code Online (Sandbox Code Playgroud)

我该如何管理这种行为?

laa*_*lto 8

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

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

在你的情况下,COLUMN_ID看起来像一个很好的PRIMARY KEY约束候选人.您的代码中没有必要使用第二个arg nullColumnHackCOLUMN_ID,您可以将其传递给null.