2012-01-28 60 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是否已經存在,然後再嘗試執行此操作。