package db;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.mchange.v2.c3p0.ComboPooledDataSource;/**?* 數據庫操作工具類?* @author lamp?*/public class DBUtils {? ?? private static ComboPooledDataSource ds=null; ? private static Connection conn=null; private static final String DRIVER = "com.mysql.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/imooc.student?useUnicode=true&characterEncoding=UTF-8"; private static final String USERNAME = "root"; private static final String PASSWORD = "lingqi.zaq"; ? ? private DBUtils(){}? ??? ? //靜態初始化塊進行初始化 ?? ? static{ ?? ? ? ? try { ?? ? ? ? ? ? ds = new ComboPooledDataSource();//創建連接池實例 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setDriverClass(DRIVER);//設置連接池連接數據庫所需的驅動 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setJdbcUrl(URL);//設置連接數據庫的URL ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setUser(USERNAME);//設置連接數據庫的用戶名 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setPassword(PASSWORD);//設置連接數據庫的密碼 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setMaxPoolSize(50);//設置連接池的最大連接數 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setMinPoolSize(2);//設置連接池的最小連接數 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setInitialPoolSize(10);//設置連接池的初始連接數 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setMaxStatements(100);//設置連接池的緩存Statement的最大數 ? ? ? ? ? ? ?? ? ? ? } catch (Exception e) { ?? ? ? ? ? ? e.printStackTrace(); ?? ? ? ? } ?? ? } ?? ??? ??? ? //定義一個獲取數據庫連接的方法? ? public static Connection getConnection(){? ? ? ??? ? ? ? try {? ? ? ? conn = ds.getConnection(); ?? ? ? ? } catch (SQLException e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? System.out.println("獲取連接失敗");? ? ? ? }? ? ? ? return conn;? ? }? ??? ? /**? ? ?* 關閉數據庫連接? ? ?* @param rs? ? ?* @param stat? ? ?* @param conn? ? ?*/? //釋放資源 ?? ? public static void close(ResultSet rs,PreparedStatement ptmt,Connection conn){ ?? ? ? ? if(null != rs){ ?? ? ? ? ? ? try { ?? ? ? ? ? ? ? ? rs.close(); ?? ? ? ? ? ? } catch (SQLException e) { ?? ? ? ? ? ? ? ? e.printStackTrace(); ?? ? ? ? ? ? } ?? ? ? ? } ?? ? ? ? ??? ? ? ? if(null != ptmt){ ?? ? ? ? ? ? try { ?? ? ? ? ? ? ? ? ptmt.close(); ?? ? ? ? ? ? } catch (SQLException e) { ?? ? ? ? ? ? ? ? e.printStackTrace(); ?? ? ? ? ? ? } ?? ? ? ? } ?? ? } ?? ??? ? //測試? ? public static void main(String[] args) { Connection c = DBUtils.getConnection(); if(c!=null){ System.out.println("數據庫連接成功"); try { c.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ System.out.println("數據庫連接失敗"); } }}這是小弟的數據庫連接池代碼發現每次運行項目都會向數據庫要好多個連接,而不是在已有的連接里面復用。知道超過最大連接數后,整個程序就卡死了是哪邊沒寫對嗎
添加回答
舉報
0/150
提交
取消