我有一列一個數據庫,並創建它像這樣避免重複行
function populateDB(tx){
tx.executeSql('CREATE TABLE IF NOT EXISTS RESULT(result, UNIQUE(result))');
}
然而
,當我想寫對象到表中,我得到的錯誤:
could not execute statement (19 constraint failed)
只有當我將NOT NULL和PRIMARY KEY添加到設置時纔會出現此錯誤。如果沒有它,它會一直在我的數據庫中寫入重複數據(我在啓動phonegap iOS應用程序時使用webservice的數據填充數據庫,所以我想在數據庫級別捕獲重複行)
起初我只有「PRIMARY KEY「,並且由於錯誤提到了約束條件,所以我假定主鍵必須是」NOT NULL「,並將其添加到代碼中,但我仍然遇到同樣的錯誤。
我該如何解決這個問題。在此先感謝
編輯:也許知道我寫入字符串的JSON對象到結果列是很重要的。
編輯:我在這個函數中插入對象。基本上我做一個接一個:
this.save = function(){
db.transaction (function(transaction){
object = $.toJSON(self);
object = encodeURI(object);
transaction.executeSql('INSERT INTO RESULT (result) VALUES ("'+object+'")');
},
errorCB,
successCB
);
}
編輯:我更新了我的設置表的代碼。錯誤不會發生在每一行上,但對象實際上是唯一的。
一個'PRIMARY KEY'強制執行'UNIQUE CONSTRAINT'。所以這就是你的重複失敗的限制。但是,爲了解決您的問題,我們需要知道您如何插入數據。一次一行,一個批量插入,從另一個表等,等? – MatBailie
19,這是某種記錄? :P –
是否在定義更改後刪除並重新創建了表?通過爲表中已經存在的數據生成錯誤,「19」約束違規錯誤基本上爲您的目的服務。 – dhaval