我有一列一个数据库,并创建它像这样避免重复行
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