我有一个包含一些项目的列表。使用可以将其中的一些保存在数据库中,作为收藏夹。我的问题是,如果他尝试在收藏夹中添加相同的项目两次,我会在数据库中获取重复的记录。我该如何解决?
我在想像
ourDatabase.rawQuery("DELETE FROM "+DBHelper.DATABASE_TABLE+" WHERE"+DBHelper.NAME+" EQUALS "+DBHelper.NAME+");",null);
但它不起作用。
这是我创建的Entry方法
public void createEntry(String name, String dodes) {
try {
ContentValues cv = new ContentValues();
cv.put(NAME, name);
cv.put(DODES, dodes);
// ourDatabase.rawQuery("DELETE FROM "+DBHelper.DATABASE_TABLE+" WHERE "+DBHelper.NAME+" = "+DBHelper.NAME+");",null);
ourDatabase.insert("DB", null, cv);
} catch (Exception e) {
Log.e("Exception in insert :", e.toString());
e.printStackTrace();
}
}
答案 0 :(得分:3)
简单的答案是确保记录是“唯一的”。
您可以通过添加“唯一索引”在数据库中执行此操作。
我们想要像
这样的东西CREATE UNIQUE INDEX unique_name ON some_table(name)
在代码中有这样的东西;
"CREATE UNIQUE INDEX unique_name ON "+
DBHelper.DATABASE_TABLE+
"("+DBHelper.NAME+")"
这意味着如果您尝试插入副本,则会出现错误。
因此,在尝试执行此操作之前,您还需要添加检查name
是否已存在的代码。
答案 1 :(得分:0)
在插入之前,请检查是否已存在具有相同名称的项目。如果是,请执行更新而不是插入。
Cursor crsr = null;
try
{
crsr = ourDatabase.rawQuery("SELECT _id FROM "+DBHelper.DATABASE_TABLE
+" WHERE "+DBHelper.NAME+"='"+name+"'", null);
}
catch ( Exception excp )
{
crsr = null;
}
if ( (crsr == null) || (crsr.getCount() < 1) )
// Insert item
else
// Update item