通常,如果您同时进行多个查询(您没有完成一些早期的sql语句,或者您打开了多个线程,或者您多次打开了数据库),就会得到此信息。
这段代码对sqlite3_close
和的使用有些混乱,sqlite3_reset
(和缺少sqlite3_finalize
),这可能是问题的根源。
在《 SQLite C / C ++接口简介》中,他们指出了正确的语句顺序:
最重要的sqlite3_open
是,您的调用sqlite3_close
在结尾处没有与单个语句匹配(但是您sqlite3_close
的代码中间有多余的内容)。另外,每个都sqlite3_prepare_v2
必须有自己的sqlite3_finalize
(仅sqlite3_reset
在要重置准备好的语句时使用,以便可以将其与新值绑定并再次遍历;但是sqlite3_finalize
在准备好的语句全部用完时仍然需要)。