似乎无法弄清楚为什么这个简单的陈述不起作用
tx.executeSql("INSERT INTO history SELECT * FROM scan");
如果表历史记录为空且没有多大用处,但如果表历史记录中有任何数据,那么它可以正常工作,那么它就不会执行我必须执行的插入操作:
tx.executeSql("DELETE FROM history", []);
tx.executeSql("INSERT INTO history SELECT * FROM scan");
有什么想法吗?干杯
编辑:
结构是相同的:
tx.executeSql("CREATE TABLE IF NOT EXISTS scan(ID INTEGER NOT NULL PRIMARY KEY, sunum TEXT, binnum TEXT, userid TEXT, added_on DATETIME, upload_on DATETIME)");
tx.executeSql("CREATE TABLE IF NOT EXISTS history(ID INTEGER NOT NULL PRIMARY KEY, sunum TEXT, binnum TEXT, userid TEXT, added_on DATETIME, upload_on DATETIME)");
答案 0 :(得分:0)
问题在于您尝试将重复的主键值插入History
表。根据您的结构,它们都ID
列为PRIMARY KEY
,不能包含重复值。
尝试指定除该键之外的所有列:
INSERT INTO History
(sunum, binnum, userid, added_on, upload_on)
SELECT sunum, binnum, userid, added_on, upload_on
FROM Scan
但是,查看结构时,ID
值不会自动递增。如果您不关心ID
的内容,可以将ID
列声明为:ID INT NOT NULL AUTO_INCREMENT
。
如果您需要从另一个表中提取ID
,则必须进行upsert或合并到该表中。