Maison >développement back-end >Golang >Comment éviter les verrous de base de données SQLite3 dans Go ?

Comment éviter les verrous de base de données SQLite3 dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-07 20:53:101003parcourir

How to Avoid SQLite3 Database Locks in Go?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn