C ++ SQLite3在更新后立即返回一个空查询

时间:2013-01-14 22:57:13

标签: c++ sql database sqlite

我遇到了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'(或同一记录上的UPDATE和SELECT)时

所有更新的信息都是正确的,但是选择失败,除非我在操作之间放置一个小的睡眠或中断(不能背靠背运行)

我是多线程,共享缓存和多个连接

sqlite3_config(SQLITE_CONFIG_SERIALIZED);

sqlite3_enable_shared_cache(true);

sqlite3_open("file::memory:?cache=shared", &hDBC_);

感谢您的帮助。

编辑: 对于我正在使用的开始和结束交易

sqlite3_exec

对于Query,Insert,Delete,Update的准备语句,我正在使用

sqlite3_prepare_v2

对于我正在使用的执行语句

sqlite3_step

对于我正在使用的发布声明

sqlite3_finalize

1 个答案:

答案 0 :(得分:0)

感谢大家的帮助。

问题出在我的查询中。我有一个触发器,只要给定记录有更新,就会更新“last_modified”字段。我的查询有一个where子句,表示... last_modified< CURRENT_TIMESTAMP。因此,如果在与查询相同的1s间隔期间发生任何更新,则会删除它们。问题是我不理解/重新确定时间戳的精确度是1秒。

再次感谢您的帮助