web-dev-qa-db-fra.com

Une connexion à une base de données doit-elle rester ouverte tout le temps ou uniquement ouverte en cas de besoin?

J'ai un plugin bukkit (minecraft) qui nécessite une connexion à la base de données.

Une connexion à une base de données doit-elle rester ouverte tout le temps, ou être ouverte et fermée en cas de besoin?

28
aman207

La connexion à la base de données doit être ouverte uniquement lorsqu'elle est nécessaire et fermée après avoir fait tout le travail nécessaire avec elle. Échantillon de code:

  • Avant Java 7:

    Connection con = null;
    try {
        con = ... //retrieve the database connection
        //do your work...
    } catch (SQLException e) {
        //handle the exception
    } finally {
        try {
            if (con != null) {
                con.close();
            }
        } catch (SQLException shouldNotHandleMe) {
            //...
        }
    }
    
  • Java 7:

    try (Connection con = ...) {
    } catch (SQLException e) {
    }
    //no need to call Connection#close since now Connection interface extends Autocloseable
    

Mais comme l'ouverture manuelle d'une connexion à une base de données est trop coûteuse, il est fortement recommandé d'utiliser un pool de connexions à la base de données . Cela gérera les connexions physiques à la base de données pour vous et lorsque vous la fermerez (c'est-à-dire en appelant Connection#close), la connexion à la base de données physique sera simplement en mode SLEEP et sera toujours ouverte.

Questions/réponses connexes:

Quelques outils pour gérer le pool de connexions de base de données:

19
Luiggi Mendoza

Cela dépend de vos besoins.

La création d'une connexion prend un certain temps, donc si vous devez accéder fréquemment à la base de données, il est préférable de garder la connexion ouverte. Il est également préférable de créer un pool, afin que de nombreux utilisateurs puissent accéder à la base de données simultanément (si nécessaire).

Si vous devez utiliser cette connexion seulement quelques fois, vous ne pourrez pas la garder ouverte, mais vous aurez du retard lorsque vous voudrez accéder à la base de données. Je vous suggère donc de créer une minuterie qui maintiendra la connexion ouverte pendant un certain temps (délai de connexion).

3
qiGuar

En fait, tout dépend de la façon dont vous écrivez votre candidature! C'est un art, mais malheureusement tout le monde prend un tutoriel pour une bonne pratique comme les tutoriels de Microsoft.

Si vous savez ce que vous codez, vous gardez votre connexion ouverte pendant toute la durée de vie de l'application. C'est simple, pas parce que vous devez vous rendre au travail le matin que chaque jour, nous devons construire un itinéraire spécial rien que pour vous! Vous prenez ce seul itinéraire ou 2 ou 4 comme tout le monde! Vous jugez pour les trafics et vous construisez 2, 4 ou 6 itinéraires au besoin. S'il y a du trafic avec ces 4 ou 6 itinéraires, vous attendez!

Codage heureux.

2
intiko81

Vous devez fermer vos connexions après chaque exécution de requête.Parfois, vous devez exécuter plusieurs requêtes en même temps car les requêtes sont suspendues les unes aux autres.Par exemple, "commencez par insérer la tâche, puis affectez-la aux employés". interroge la même transaction et la valide, si des erreurs se produisent, annulez-la. Par défaut, la validation automatique est désactivée dans JDBC. Exemple

Utilisez le pool de connexions.Si vous développez une application Web, utilisez le pool de connexions App Server.Le serveur d'applications utilisera le même pool pour chacune de vos applications afin que vous puissiez contrôler le nombre de connexions à partir d'un seul point.Recommande fortement le pool de connexions Apache Tomcat. Exemple

Comme info supplémentaire: Connection, Statement et ResultSet.

1.Si vous fermez la connexion, vous n'avez pas besoin d'une instruction close ou d'un jeu de résultats.Les deux seront fermés automatiquement

2.Si vous fermez Statement, il fermera également ResultSet.

3.si vous utilisez des ressources d'essai comme ceci:

try (Connection con = ...) {
} catch (SQLException e) {
}

il fermera la connexion automatiquement.Parce que l'essai avec des ressources nécessite des objets autoclosables et que la connexion est autoclosable.Vous pouvez voir les détails sur l'essai avec des ressources ici

2
Sarkhan

La connexion ne doit être ouverte qu'en cas de besoin. S'il est ouvert avant le besoin réel, il réduit une connexion active du pool de connexions. Il affecte donc en fin de compte les utilisateurs de l'application.

Par conséquent, il est toujours préférable d'ouvrir la connexion uniquement lorsque cela est nécessaire et de la fermer une fois le processus terminé.

Essayez toujours de mettre votre logique de fermeture de connexion à l'intérieur du bloc finally qui garantira que votre connexion sera fermée, même si une exception se produit dans l'application

finally
{
connection.close()
}
0
Sai Avinash