避免在phonegap数据库中重复行

时间:2012-06-15 10:33:02

标签: sql database cordova

我有一个包含单个列的数据库并像这样创建

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
    );
}

编辑:我更新了我的设置表格代码。错误不会发生在每一行,但对象实际上是唯一的。

1 个答案:

答案 0 :(得分:0)

“IF NOT EXISTS”是这里的捕获。在SQLite查询中使用“IF NOT EXISTS”或“REPLACE”,“IGNORE”等条件时,约束失败。

假设您正在尝试创建一个已经存在的表,那么约束(这里不再创建表,如果它已经存在)失败,因此查询失败(您实际想要的 - 您不想复制表格对吗?)并给出错误约束失败。

您可能会在INSERT或REPLACE,INSERT或IGNORE等上遇到类似的错误......

相关问题