Meine Windows-Anwendung (in C geschrieben) verwendet SQLite (mit der eingebetteten amalgamierten Quelle) zum Speichern von Offline-Daten, und hatte keine Probleme mit ihm in einem Multibyte-Zeichen Set bauen. Ich konvertiere jetzt die Codebasis in Unicode. SQLite läuft sehr gerne mit dem Unicode-Build und erstellt SQLite-Datenbanken in UTF-16LE-Codierung.SqLite-Datenbank wird nicht geschlossen, wenn in Unicode und PRAGMA journal_mode gesetzt ist
Ich bin jedoch auf eine sehr seltsame Sache gestoßen. Wenn ich die Abfrage PRAGMA journal_mode = DELETE
(eigentlich, es auf einen der zulässigen Werte, einschließlich OFF
setzt, macht das gleiche), alles läuft gut, bis der Code die Datenbank schließt, an diesem Punkt gibt der Aufruf an sqlite3_close()
SQLITE_BUSY
zurück, mit dem Fehler "unable to close due to unfinalised statements"
.
Das passiert sogar, wenn die einzige Abfrage, die ich auf der Datenbank ausführen, dieser einzelne Pragma-Befehl ist! Ich kann andere pragmas in Ordnung (z. B. "PRAGMA synchronous = NORMAL"
) und alle meine SQL-Abfragen ausführen, und die Datenbank wird ziemlich glücklich schließen; Es ist nur dieses journal_mode
Pragma, das dieses seltsame Verhalten verursacht, und NUR im Unicode-Build des Codes - das Multibyte-Build zeigt dieses Problem nicht. Dies geschieht unabhängig davon, ob die Datenbank bereits [im UTF-16LE-Modus] existiert oder ob sie beim ersten Öffnen erstellt wird.
Irgendwelche Ideen, was könnte falsch sein? Ich benutze SQLite Build v3.7.11.
Noch eine Anmerkung: Technisch gesehen ist der Pragma-Aufruf nicht die einzige Abfrage, die ich ausführe: Ich führe auch den Aufruf 'PRAGMA quick_check (1)' aus, wenn ich die DB zum ersten Mal öffne/erstelle. –
Etwas verwirrt, 'journal_mode' scheint nicht" NORMAL "als einer seiner erlaubten Werte zu haben – Hasturkun
Whoops, ich meinte" DELETE "- d. H. Der Standard. Ich werde die Frage bearbeiten. –