我正在处理迁移功能。它从旧表读取数据并将其插入新数据。所有在后台工作的东西都是低优先级的。sqlite和'约束失败'错误,同时选择并插入
我在伪代码中的步骤。
sqlite3_prepare_stmt (select statement)
sqlite3_prepare_stmt (insert statement)
while (sqlite3_step (select statement) == SQLITE_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 statement)
上收到'约束失败'错误。为什么它发生了,我该如何解决这个问题?
UPD:据我所知,这是因为后台线程使用数据库句柄在主线程中打开。现在检查猜测。
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)
感谢您的更新。我编辑了我的答案,并添加了一些更有用(我希望)的信息。 – 2011-03-16 15:13:57