Maison > base de données > tutoriel mysql > le corps du texte

Ma connexion JDBC utilise-t-elle réellement un pool ?

DDD
Libérer: 2024-11-24 03:48:10
original
871 Les gens l'ont consulté

Is My JDBC Connection Actually Using a Pool?

Regroupement de connexions JDBC : vérification de la mise en œuvre

Déterminer si vous utilisez le regroupement de connexions JDBC peut prêter à confusion en raison de sa prétendue simplicité. Examinons la classe de connexion fournie et son utilisation pour vérifier si un véritable regroupement de connexions est utilisé.

Analyse de classe de connexion

La classe de connexion fournie semble utiliser BasicDataSource de DBCP pour gestion des connexions. Cependant, un examen plus approfondi révèle qu'un nouveau pool de connexions est établi à chaque acquisition de connexion. Cela annule le concept fondamental de regroupement de connexions, car les connexions doivent être tirées d'un pool unique et partagé.

De plus, il n'est pas recommandé de conserver la connexion en tant que variable d'instance. Les connexions doivent être obtenues selon les besoins et correctement fermées pour récupérer efficacement les ressources.

Extraits de code réécrits

Pour corriger ces problèmes, voici une classe de connexion révisée :

public final class Database {

    private static final BasicDataSource dataSource = new BasicDataSource();

    static {
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/data");
        dataSource.setUsername("USERNAME");
        dataSource.setPassword("PASSWORD");
    }

    private Database() {
        //
    }

    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

}
Copier après la connexion

Ce code crée le pool de connexions une seule fois et fournit un moyen d'obtenir des connexions depuis

Utilisation révisée de la connexion

Voici comment utiliser la classe de connexion et la fonctionnalité JDBC de manière plus robuste :

private static final String SQL_EXIST = "SELECT * FROM users WHERE username=? AND password=?";

public boolean exist(User user) throws SQLException {
    boolean exist = false;

    try (
        Connection connection = Database.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_EXIST);
    ) {
        statement.setString(1, user.getUsername());
        statement.setString(2, user.getPassword());

        try (ResultSet resultSet = preparedStatement.executeQuery()) {
            exist = resultSet.next();
        }
    }       

    return exist;
}
Copier après la connexion

Ceci le code révisé utilise un bloc try-with-resource pour garantir la bonne libération des connexions et autres ressources.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal