0

我有一个单列数据库并像这样创建它

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”,将它添加到代码中,我仍然得到同样的错误。

我该如何解决这个问题。提前致谢

编辑:也许知道我将字符串化的 JSON 对象写入结果列对您来说很重要。

编辑:我在这个函数中插入对象。基本上我是一一做的:

this.save = function(){
    db.transaction (function(transaction){
        object = $.toJSON(self);
        object = encodeURI(object);
        transaction.executeSql('INSERT INTO RESULT (result) VALUES ("'+object+'")');
        },
        errorCB, 
        successCB
    );
}

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

4

1 回答 1

0

“如果不存在”是这里的问题。当您在 SQLite 查询中使用“IF NOT EXISTS”或“REPLACE”、“IGNORE”等条件时,约束会失败。

假设,您正在尝试创建一个已经存在的表,然后约束(如果它已经存在,则不再创建该表)失败,因此查询失败(您实际上想要 - 您不想复制表吗? ) 并为您提供错误约束失败。

您可能会在 INSERT 或 REPLACE、INSERT 或 IGNORE 等方面遇到类似的错误...

于 2013-06-26T06:38:24.123 回答