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
私が使用しているクエリ、挿入、削除、更新の準備ステートメントについて
sqlite3_prepare_v2
私が使用しているexecuteステートメントについて
sqlite3_step
私が使用しているリリースステートメントについて
sqlite3_finalize