我在使用 SQLite 3 版本 3.7.14.1 时遇到问题,如果我进行更新然后立即尝试进行查询,它将返回 0 结果,就好像它不存在一样。
这是我的日志示例:
SQLiteDB::beginTransaction: 0
SQLiteDB::prepareStatement: 0
SQLiteDB::executeStatement -- Executing SQL query:SELECT ... ID LIKE '2' ...
SQLiteDB::executeStatement: 100
SqlHandler::queryEvent -- Bound results.
SqlHandler::retrieveEvents -- Result set has 1 entries
SQLiteDB::releaseStatement: 0
SQLiteDB::prepareStatement: 0
SQLiteDB::executeStatement -- Executing SQL query:UPDATE ... WHERE ID = '2'
SQLiteDB::executeStatement: 101
SQLiteDB::releaseStatement: 0
SQLiteDB::endTransaction: 0
SQLiteDB::beginTransaction: 0
SQLiteDB::prepareStatement: 0
SQLiteDB::executeStatement -- Executing SQL query:SELECT ... ID LIKE '2' ...
SQLiteDB::executeStatement: 100
SqlHandler::queryEvent -- Bound results.
SqlHandler::retrieveEvents -- Result set has 1 entries
SQLiteDB::releaseStatement: 0
SQLiteDB::prepareStatement: 0
SQLiteDB::executeStatement -- Executing SQL query:UPDATE id = '2'
SQLiteDB::executeStatement: 101
SQLiteDB::releaseStatement: 0
SQLiteDB::endTransaction: 0
SQLiteDB::beginTransaction: 0
SQLiteDB::prepareStatement: 0
SQLiteDB::executeStatement -- Executing SQL query:SELECT ... ID LIKE '2' ...
SQLiteDB::executeStatement: 101
SqlHandler::queryEvent -- Nothing found.
SQLiteDB::releaseStatement: 0
Accessor::query -- Unable to perform query. queryEvent failed.
SQLiteDB::endTransaction: 0
如果我对“3”进行更新并选择“2”就没有问题,只有当我更新“2”并选择“2”时(或在同一记录上更新和选择)
所有更新的信息都是正确的,但是选择失败,除非我在操作之间放置一个小睡眠或中断(不能背靠背运行)
我是多线程、共享缓存和多个连接
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
sqlite3_enable_shared_cache(true);
sqlite3_open("file::memory:?cache=shared", &hDBC_);
提前感谢您的帮助。
编辑:对于我正在使用的开始和结束事务
sqlite3_exec
对于我正在使用的查询、插入、删除、更新的准备语句
sqlite3_prepare_v2
对于我正在使用的执行语句
sqlite3_step
对于我正在使用的发布声明
sqlite3_finalize