2012-06-15 225 views
0

我有一列一个数据库,并创建它像这样避免重复行

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

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

+0

一个'PRIMARY KEY'强制执行'UNIQUE CONSTRAINT'。所以这就是你的重复失败的限制。但是,为了解决您的问题,我们需要知道您如何插入数据。一次一行,一个批量插入,从另一个表等,等? – MatBailie

+0

19,这是某种记录? :P –

+0

是否在定义更改后删除并重新创建了表?通过为表中已经存在的数据生成错误,“19”约束违规错误基本上为您的目的服务。 – dhaval

回答

0

“如果不存在”就在这里。当您在SQLite查询中使用诸如“IF NOT EXISTS”或“REPLACE”,“IGNORE”等条件时,您会遇到约束失败。

假设你试图创建一个已经存在的表,那么约束(如果它已经存在,不会再创建表)会失败,因此查询失败(你真的想要 - 你不想重复表格是否正确?),并给出错误约束失败。

您可能会收到类似的错误在INSERT或替换,插入或疏忽等...