我有一个包含单个列的数据库并像这样创建
function populateDB(tx){
tx.executeSql('CREATE TABLE IF NOT EXISTS RESULT(result, UNIQUE(result))');
}
但是,当我想在表中写入对象时,我收到错误:
无法执行语句(19约束失败)
仅当我将NOT NULL和PRIMARY KEY添加到设置时才会出现错误。没有它,它会不断在我的数据库中写入重复项(我在启动一个phonegap iOS应用程序时使用来自web服务的数据填充数据库,所以我想在数据库级别捕获重复的行)
起初我只有“PRIMARY KEY”,并且因为错误说明了约束,我假设主键必须是“NOT NULL”,将它添加到代码中,我仍然得到相同的错误。
我该如何解决这个问题。提前谢谢
编辑:您可能知道我将stringyfied JSON对象写入结果列很重要。
编辑:我在此功能中插入对象。基本上我一个接一个地做:
this.save = function(){
db.transaction (function(transaction){
object = $.toJSON(self);
object = encodeURI(object);
transaction.executeSql('INSERT INTO RESULT (result) VALUES ("'+object+'")');
},
errorCB,
successCB
);
}
编辑:我更新了我的设置表格代码。错误不会发生在每一行,但对象实际上是唯一的。
答案 0 :(得分:0)
“IF NOT EXISTS”是这里的捕获。在SQLite查询中使用“IF NOT EXISTS”或“REPLACE”,“IGNORE”等条件时,约束失败。
假设您正在尝试创建一个已经存在的表,那么约束(这里不再创建表,如果它已经存在)失败,因此查询失败(您实际想要的 - 您不想复制表格对吗?)并给出错误约束失败。
您可能会在INSERT或REPLACE,INSERT或IGNORE等上遇到类似的错误......