2012-01-28 58 views
1

我有一些项目的列表。使用可以将其中的一些保存在数据库中,作为收藏夹。我的问题是,即使他试图在收藏夹中添加同一项目两次,数据库中的重复记录即时消息。如何我可以修复它吗?如何删除重复的数据库记录?

我的想法是这样

ourDatabase.rawQuery("DELETE FROM "+DBHelper.DATABASE_TABLE+" WHERE"+DBHelper.NAME+" EQUALS "+DBHelper.NAME+");",null); 

,但它不工作。

这是我创建输入方法

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

一种方法可能是选择不同并删除所有不在交集中的所有记录,并设置...我想。 – Rig 2012-01-28 18:21:28

+0

我的问题是这样的,但对于Android http://stackoverflow.com/questions/3888606/delete-duplicated-rows-from-database – user1156210 2012-01-28 18:23:06

回答

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 
+0

是的,这是想法,但我将如何与代码? – user1156210 2012-01-28 18:24:29

+0

感谢您的回答。我得到“SQLite的返回:错误代码= 1,MSG =附近”)“:语法错误” – user1156210 2012-01-28 19:08:27

+0

是否有任何错误的选择查询? – user1156210 2012-01-28 19:08:52

3

简单的答案是,以确保记录是“独一无二”的。

您可以通过添加“唯一索引”在数据库中执行此操作。

我们要像

CREATE UNIQUE INDEX unique_name ON some_table(name) 

因此,像这样的代码;

"CREATE UNIQUE INDEX unique_name ON "+ 
DBHelper.DATABASE_TABLE+ 
"("+DBHelper.NAME+")" 

这意味着如果您尝试插入重复项,则会出现错误。

因此,您还需要添加代码,检查name是否已经存在,然后再尝试执行此操作。