c3p0是一款Java數據庫連接池,提供了豐富的配置選項,使用起來非常方便。下面是一個基于c3p0的訪問MySQL數據庫的例子。
public class MySQLConnectionPool { private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); static { try { dataSource.setDriverClass("com.mysql.cj.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/my_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"); dataSource.setUser("root"); dataSource.setPassword("123456"); // 連接池的配置 dataSource.setInitialPoolSize(5); dataSource.setMinPoolSize(1); dataSource.setMaxPoolSize(20); dataSource.setMaxIdleTime(60); } catch (Exception e) { throw new RuntimeException("Failed to initialize connection pool", e); } } public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } }
上述代碼中,ComboPooledDataSource是c3p0提供的默認實現,我們在靜態塊中進行了一些配置,比如設置驅動、URL、用戶名、密碼等等。我們還調整了連接池的一些參數,比如初始連接數、最大連接數等。getConnection()方法可以獲取一個連接,如果沒有連接可用則會等待一段時間,直到有可用連接為止。
使用該連接池進行數據庫操作也非常簡單:
try (Connection conn = MySQLConnectionPool.getConnection()) { try (PreparedStatement stmt = conn.prepareStatement("SELECT * FROM orders WHERE status = ?")) { stmt.setInt(1, 0); try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { // 處理查詢結果 } } } catch (SQLException e) { // 處理異常 } } catch (SQLException e) { // 處理異常 }
先調用getConnection()方法獲取一個連接,然后在try-with-resources語句塊中使用PreparedStatement進行數據庫操作,最后再通過ResultSet處理查詢結果。注意,我們使用了兩個try-with-resources語句塊,這是為了確保資源在使用后可以被正確關閉。
總之,c3p0是Java數據庫連接池中的佼佼者,使用起來非常方便,配置也非常靈活,能夠滿足大部分的需求。