Verrouillage de la base de données SQLite3 dans Go
Lorsque vous travaillez avec des bases de données SQLite3 dans Go, les développeurs peuvent rencontrer l'erreur « La base de données est verrouillée ». Cela se produit généralement lorsque plusieurs threads tentent d'accéder simultanément au même fichier de base de données. Cependant, même lorsqu'une seule connexion est établie dans le code, des descripteurs de fichiers de base de données supplémentaires peuvent toujours être créés.
Dans l'exemple de code fourni, le descripteur de base de données est créé deux fois. Tout d'abord, dans la fonction getDatabaseHandle, puis à nouveau dans la fonction dosomething. Cela peut entraîner l'ouverture simultanée de plusieurs descripteurs de fichiers de base de données, ce qui entraîne l'erreur « La base de données est verrouillée ».
Pour résoudre ce problème, différez la fermeture des résultats de la requête à l'aide de defer. Dans l'exemple de code, modifiez la fonction dosomething comme suit :
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() // Defer closing the query results if rows.Next() { ... } // some insert queries tx.Commit() }
En différant la fermeture des résultats de la requête, Go les fermera automatiquement une fois la fonction terminée, garantissant que les descripteurs de fichiers de base de données sont correctement libérés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!