2011-06-13 14 views
4

問題背景: 我有兩個表,其中主鍵是文本字段。Android上的SQLite:insertWithOnConflict()返回相同數據集的不斷增加的結果

當我使用相同的數據重複使用SQLiteDatabase.insertWithOnConflict(myTable, null, myValues, SQLiteDatabase.CONFLICT_REPLACE)時,我看到不斷增加的值被返回。

因此,對於相同的數據集,INSERT正在執行(而不是REPLACE)。

問題: 然而,看着這些表與「SQLite數據庫瀏覽器」我看到的是進行時更換,我期望記錄正確的號碼。

根到我的混亂是描述Android文檔,指出: *返回 新插入的行或現有行的主鍵的行ID,如果輸入參數「conflictAlgorithm」 = CONFLICT_IGNORE OR -1,如果任何錯誤*

問題: 爲什麼REPLACE已完成,但現有數據的行ID未返回?

回答

5

對我來說,好像它在做你正在問的事情?你問它取代它確實如此。它會刪除舊行並插入新行。

如果您通過CONFLICT_IGNORE,它將離開舊行並返回該ID。

+1

如果我有三行:A,B,C和我通過另一個AI期待它取代現有的A並返回1.但我想它是做的是刪除現有的A和新的行是數字4 – 2011-06-14 21:23:58

+0

這正是基於文檔應該做的。它刪除行A(第1行),並將其重新插入行A(現在是第4行,因爲它是第3行之後的新插入)。我希望這是有道理的。 – mattdonders 2012-10-12 20:46:13

+2

關於你的最後一句話......不,不應該使用CONFLICT_IGNORE。它沒有按預期工作。 https://code.google.com/p/android/issues/detail?id=13045 – Tom 2013-04-18 17:22:12

0
try{ 
insertWithOnConflict(openHelper_ob.TABLE_NAME,null,contentValues, 
SQLiteDatabase.CONFLICT_ABORT); 
} 
catch(SQLException ex) 
{ 
Toast.makeText(getApplicationContext(),"name found before plz, change it", Toast.LENGTH_SHORT).show(); 
} 
相關問題