#javax.sql.PooledConnection
# 描述
javax.sql.PooledConnection表示当用户通过DataSource建立多个数据库连接时,可将这些连接放在连接池Connection Pool中,此时Connection Pool可帮助用户实现对物理连接的缓存和重用,能提高应用的性能和可扩展性。
详细接口说明请参考JDBC官方网站 (opens new window)。
# 方法
YashanDB对PooledConnection接口有如下方法:
| 方法 | 返回类型 |
|---|---|
| addConnectionEventListener(ConnectionEventListener listener) | void |
| addStatementEventListener(StatementEventListener listener) | void |
| close() | void |
| getConnection() | Connection |
| removeConnectionEventListener(ConnectionEventListener listener) | void |
| removeStatementEventListener(StatementEventListener listener) | void |
# 示例
package quickstart;
import javax.sql.ConnectionEvent;
import javax.sql.ConnectionEventListener;
import javax.sql.PooledConnection;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ConnectionPoolMonitor {
private List<PooledConnection> connections = new ArrayList<>();
public void monitorPooledConnection(PooledConnection pooledConn) {
// 添加连接事件监听器
pooledConn.addConnectionEventListener(new ConnectionEventListener() {
@Override
public void connectionClosed(ConnectionEvent event) {
System.out.println("Connection closed");
// 记录连接使用统计
recordConnectionUsage(null);
}
@Override
public void connectionErrorOccurred(ConnectionEvent event) {
SQLException error = event.getSQLException();
System.out.println("Connection error: " + error.getMessage());
// 检测到错误,可能需要发送告警
alertConnectionError(error);
}
});
connections.add(pooledConn);
}
public void stopMonitoring(PooledConnection pooledConn) {
// 移除所有监听器
// 在实际实现中,我们需要保存监听器引用
// 此处简化处理
connections.remove(pooledConn);
}
private void recordConnectionUsage(Connection conn) {
// 记录连接使用统计
}
private void alertConnectionError(SQLException error) {
// 检测到错误,可能需要发送告警
}
public static void main(String[] args) throws SQLException {
com.yashandb.jdbc.pool.YasConnectionPoolDataSource ds = new com.yashandb.jdbc.pool.YasConnectionPoolDataSource();
ds.setServerName("192.168.1.2");
ds.setPortNumber(1688);
ds.setDatabaseName("yasdb");
ds.setUser("username");
ds.setPassword("passwd");
ConnectionPoolMonitor monitor = new ConnectionPoolMonitor();
PooledConnection pooledConn = ds.getPooledConnection();
monitor.monitorPooledConnection(pooledConn);
try (Connection conn = pooledConn.getConnection();
java.sql.Statement stmt = conn.createStatement()) {
stmt.execute("SELECT 1 FROM dual");
}
pooledConn.close();
}
}
正常情况下,程序输出如下:
Connection closed

