Verstehen des Fehlers „Datenbank ist gesperrt“ in Go mit Sqlite3
Beim Arbeiten mit der SQLite3-Datenbank in Go tritt die Meldung „Datenbank ist gesperrt“ auf „Fehler können eine rätselhafte Erfahrung sein. Dieser Fehler tritt normalerweise auf, wenn mehrere Threads gleichzeitig versuchen, auf dieselbe Datenbankdatei zuzugreifen. Es ist jedoch erwähnenswert, dass Sie erwähnt haben, dass Sie in Ihrem Programm nur eine Verbindung erhalten.
Bei der weiteren Untersuchung des Problems haben Sie korrekt festgestellt, dass trotz des Schließens aller Abfrageergebnisse mehrere Handles der Datenbankdatei erstellt wurden. Dies kann mit dem Programm Opendfileview bestätigt werden. Um dieses Problem zu beheben, analysieren wir den bereitgestellten Code und identifizieren, wo das Problem liegen könnte.
Die getDatabaseHandle-Funktion initialisiert eine Verbindung zur SQLite3-Datenbank und startet eine Transaktion. Es gibt das erstellte Datenbankhandle und einen Zeiger auf die Transaktion zurück. Innerhalb der Funktion „dosomething“ führen Sie eine Abfrage in der Datenbank aus und schließen dann die Ergebniszeilen. Anschließend führen Sie einige Einfügeabfragen innerhalb der Transaktion durch und übernehmen diese schließlich.
Wenn Sie den Code untersuchen, stellen Sie möglicherweise fest, dass der Aufruf von rows.Close() nicht verzögert wird. Dadurch könnten die Ergebniszeilen offen bleiben und zusätzliche Datenbankhandles entstehen. Versuchen Sie, den Zeilenabschluss wie unten gezeigt aufzuschieben:
if err != nil { return err } defer rows.Close() if rows.Next() { ... }
Durch das Aufschieben des Zeilenabschlusses stellen Sie sicher, dass die Ergebniszeilen auch dann geschlossen werden, wenn ein Fehler auftritt. Dies hilft dabei, alle zugehörigen Datenbank-Handles freizugeben und den Fehler „Datenbank ist gesperrt“ zu verhindern.
Das obige ist der detaillierte Inhalt vonWarum erhält mein Go-Programm in SQLite3 den Fehler „Datenbank ist gesperrt', selbst wenn nur eine Verbindung besteht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!