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

标签 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”时(或在同一记录上更新和选择)

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

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

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

最佳答案

谢谢大家的帮助。

问题出在我的查询中。我有一个触发器,只要给定记录有更新,它就会更新“last_modified”字段。我的查询有一个 where 子句说 ... last_modified < current_timestamp。因此,如果在与查询相同的 1 秒间隔内发生任何更新,它们将被删除。问题是我不理解/没有意识到时间戳的精度是 1 秒。

再次感谢大家的帮助

关于C++ SQLite3 在更新后立即返回一个空查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328339/

相关文章:

c# - 从大小为 n 的 r 个元素生成幂多重集

c++ - 有效地测试 QSet 是否包含元素,如果不存在则插入

java - spring batch 中来自 oracle 数据库的结果集的分区器

c++ - COleDateTimeSpan : GetTotalDays vs GetDays

c++ - 如何通过 GCC 显示 C++ 类的 VTABLE?

sql - 有没有办法重写这个语句而不需要子查询?

php - MySQL 搜索多个表

asp.net - 如何自动化功能/集成测试和数据库回滚

php - 使用数据库中已有的值更新数据库的值

php - 错误号 : 1452 Cannot add or update a child row: a foreign key constraint fails