如何删除重复的数据库记录?

时间:2012-01-28 18:17:40

标签: android database

我有一个包含一些项目的列表。使用可以将其中的一些保存在数据库中,作为收藏夹。我的问题是,如果他尝试在收藏夹中添加相同的项目两次,我会在数据库中获取重复的记录。我该如何解决?

我在想像

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();
        }
    }

2 个答案:

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