Beim Arbeiten mit SQLite3-Datenbanken in Go kann es vorkommen, dass Benutzer auf den Fehler „Datenbank ist gesperrt“ stoßen. Dieser Fehler deutet auf das Vorhandensein mehrerer gleichzeitiger Threads hin, die versuchen, auf dieselbe Datenbankdatei zuzugreifen.
Um dieses Problem zu beheben, stellen Sie sicher, dass in Ihrem Programm nur eine einzige Verbindung zur Datenbank aufrechterhalten wird. Während das Schließen von Abfrageergebnissen wichtig ist, ist es auch wichtig, die Erstellung mehrerer Datenbankdateihandles in Betracht zu ziehen.
Der folgende Codeausschnitt veranschaulicht das Problem:
func main() { database, tx, err := getDatabaseHandle() if err != nil { log.Fatal(err) } defer database.Close() dosomething(database, tx) } func dosomething(database *sql.DB, tx *sql.Tx) error { rows, err := database.Query("select * from sometable where name=?", "some") if err != nil { return err } defer rows.Close() // Deferring the rows.Close() helps resolve the issue if rows.Next() { ... } rows.Close() //some insert queries tx.Commit() }
Beachten Sie das Hinzufügen von Verzögerungszeilen. Close() innerhalb der dosomething-Funktion. Dadurch wird sichergestellt, dass das Datenbankdatei-Handle umgehend freigegeben wird, wodurch die Erstellung mehrerer Handles verhindert wird.
Mit diesem Ansatz können Sie SQLite3-Datenbankverbindungen in Go effektiv verwalten und den Fehler „Datenbank ist gesperrt“ vermeiden.
Das obige ist der detaillierte Inhalt vonWie vermeide ich den Fehler „Datenbank ist gesperrt' in Gos SQLite3?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!