我需要插入或更新,我找到了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);
如何管理此行为?
答案 0 :(得分:8)
确保您的表格中有一些适当的约束,例如PRIMARY KEY
或UNIQUE
。
插入时,通过ContentValues
向此约束列添加值。如果插入新行会违反某些约束,则首先删除冲突的行,然后插入新行。
在您的情况下,COLUMN_ID
看起来是PRIMARY KEY
约束的良好候选者。您的代码中第二个arg nullColumnHack
值COLUMN_ID
不是必需的,您可以将其作为null
传递。