Maison >développement back-end >Golang >Comment éviter l'erreur « La base de données est verrouillée » dans SQLite3 de Go ?

Comment éviter l'erreur « La base de données est verrouillée » dans SQLite3 de Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 22:20:17336parcourir

How to Avoid the

Gestion de l'erreur « La base de données est verrouillée » dans SQLite3 avec Go

Lorsque vous travaillez avec des bases de données SQLite3 dans Go, les utilisateurs peuvent rencontrer l'erreur « La base de données est verrouillée ». Cette erreur suggère la présence de plusieurs threads simultanés tentant d'accéder au même fichier de base de données.

Pour résoudre ce problème, assurez-vous qu'une seule connexion à la base de données est maintenue dans votre programme. Bien que la fermeture des résultats de requête soit essentielle, il est également crucial d'envisager la création de plusieurs descripteurs de fichiers de base de données.

L'extrait de code suivant illustre le problème :

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()
}

Notez l'ajout de lignes différées. Close() dans la fonction dosomething. Cela garantit que le handle du fichier de base de données est libéré rapidement, empêchant la création de plusieurs handles.

En suivant cette approche, vous pouvez gérer efficacement les connexions à la base de données SQLite3 dans Go et éviter l'erreur « La base de données est verrouillée ».

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