JDBC-Verbindungspooling: Überprüfung der Implementierung
Die Feststellung, ob Sie JDBC-Verbindungspooling verwenden, kann aufgrund seiner angeblichen Einfachheit verwirrend sein. Schauen wir uns die bereitgestellte Verbindungsklasse und deren Verwendung genauer an, um festzustellen, ob echtes Verbindungspooling verwendet wird.
Verbindungsklassenanalyse
Die bereitgestellte Verbindungsklasse scheint die BasicDataSource von DBCP zu verwenden Verbindungsmanagement. Bei näherer Betrachtung zeigt sich jedoch, dass bei jedem Verbindungsaufbau ein neuer Verbindungspool aufgebaut wird. Dies macht das grundlegende Konzept des Verbindungspoolings zunichte, da Verbindungen aus einem einzigen, gemeinsam genutzten Pool gezogen werden sollten.
Außerdem wird es nicht empfohlen, die Verbindung als Instanzvariable zu halten. Verbindungen sollten nach Bedarf abgerufen und ordnungsgemäß geschlossen werden, um Ressourcen effektiv zurückzugewinnen.
Neu geschriebene Codeauszüge
Um diese Probleme zu beheben, finden Sie hier eine überarbeitete Verbindungsklasse:
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(); } }
Dieser Code erstellt den Verbindungspool einmal und bietet eine Möglichkeit, Verbindungen daraus zu erhalten it.
Überarbeitete Verbindungsnutzung
So würden Sie die Verbindungsklasse und die JDBC-Funktionalität robuster nutzen:
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; }
Dies Der überarbeitete Code verwendet einen Try-with-Resource-Block, um die ordnungsgemäße Freigabe von Verbindungen und anderen Ressourcen sicherzustellen.
Das obige ist der detaillierte Inhalt vonVerwendet meine JDBC-Verbindung tatsächlich einen Pool?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!