私のWindowsアプリケーション(Cで記述)は、オフラインデータの保存にSQLite(埋め込まれた統合ソースを使用)を使用しており、マルチバイト文字セットのビルドでは問題がありませんでした。現在、コードベースをUnicodeに変換しています。SQLiteはUnicodeビルドで非常にうまく実行されており、UTF-16LEエンコーディングでSQLiteデータベースを作成しています。
しかし、私は1つの非常に奇妙なことに遭遇しました。クエリを実行するとPRAGMA journal_mode = DELETE
(実際には、を含む許可された値のいずれかに設定するとOFF
、同じことが行われます)、コードがデータベースを閉じるまですべてが正常に実行されます。データベースを閉じると、の呼び出しはエラーでsqlite3_close()
戻ります。SQLITE_BUSY
"unable to close due to unfinalised statements"
これは、データベースで実行する唯一のクエリがその単一のプラグマコマンドである場合でも発生します。他のプラグマ(たとえば"PRAGMA synchronous = NORMAL"
)とすべてのSQLクエリを正常に実行でき、データベースは非常に正常に閉じます。この奇妙な動作を引き起こしているのはこのプラグマだけjournal_mode
であり、コードのUnicodeビルドでのみ-マルチバイトビルドではこの問題は発生しません。これは、データベースが[UTF-16LEモードで]すでに存在するかどうか、またはデータベースが最初に開いたときにデータベースを作成するかどうかに関係なく発生します。
何が間違っている可能性があるのか?SQLiteビルドv3.7.11を使用しています。