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