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



