大佬教程收集整理的这篇文章主要介绍了同时选择和插入时sqlite和’约束失败’错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在伪代码中的步骤.
sqlite3_prepare_stmt (SELEct statement) sqlite3_prepare_stmt (insert statement) while (sqlite3_step (SELEct statement) == @R_506_5607@ROW) { get data from SELEct row results sqlite3_bind SELEct results to insert statement sqlite3_step (insert statement) sqlite3_reset (insert statement) } sqlite3_reset (SELEct statement)
我总是在sqlite3_step(insert语句)上遇到’约束失败’错误.为什么会发生这种情况以及如何解决这个问题?
UPD:因为我知道发生了,因为后台线程使用在主线程中打开的db句柄.现在检查猜测.
UPD2:
sqlite> SELEct sql from sqlite_master where tbl_name = 'tiles'; create table tiles('pk' INTEGER PRIMARY KEY,'data' BLOB,'x' IntegeR,'y' IntegeR,'z' IntegeR,'importKey' IntegeR) sqlite> SELEct sql from sqlite_master where tbl_name = 'tiles_v2'; create table tiles_v2 (pk int priMary key,x int,y int,z int,layer int,data blob,timestamp real)
您可以通过删除约束,更正数据或删除数据来解决此问题.删除约束通常是一件坏事,但这取决于应用程序.
是否有令人信服的理由一次一行地复制数据而不是一组?
INSERT INTO new_table SELECT column_list FROM old_table;
如果需要帮助来识别约束,请编辑原始问题,并发布这两个sqlite查询的输出.
SELEct sql from sqlite_master where tbl_name = 'old_table_name'; SELEct sql from sqlite_master where tbl_name = 'new_table_name';
更新:根据这两个查询的输出,我只看到一个约束 – 每个表中的主键约束.如果尚未在这些表上构建任何触发器,则唯一可能失败的约束是主键约束.约束失败的唯一方法是,如果您尝试插入两行具有相同值的’pk’.
我想这可能会以几种不同的方式发生.
>旧表中包含重复值@H_675_33@‘pk’栏.@H_675_33@>执行迁移的代码@H_675_33@改变或注入重复值@H_675_33@在将数据插入新的数据之前@H_675_33@表.@H_675_33@>另一个可能正在运行的进程@H_675_33@一台不同的电脑,插入或@H_675_33@在您不知情的情况下更新数@H_675_33@>我还没有想到的其他原因.
以上是大佬教程为你收集整理的同时选择和插入时sqlite和’约束失败’错误全部内容,希望文章能够帮你解决同时选择和插入时sqlite和’约束失败’错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。