package db;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.mchange.v2.c3p0.ComboPooledDataSource;/**?* 數(shù)據(jù)庫操作工具類?* @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(){}? ??? ? //靜態(tài)初始化塊進(jìn)行初始化 ?? ? static{ ?? ? ? ? try { ?? ? ? ? ? ? ds = new ComboPooledDataSource();//創(chuàng)建連接池實例 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setDriverClass(DRIVER);//設(shè)置連接池連接數(shù)據(jù)庫所需的驅(qū)動 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setJdbcUrl(URL);//設(shè)置連接數(shù)據(jù)庫的URL ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setUser(USERNAME);//設(shè)置連接數(shù)據(jù)庫的用戶名 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setPassword(PASSWORD);//設(shè)置連接數(shù)據(jù)庫的密碼 ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setMaxPoolSize(50);//設(shè)置連接池的最大連接數(shù) ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setMinPoolSize(2);//設(shè)置連接池的最小連接數(shù) ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setInitialPoolSize(10);//設(shè)置連接池的初始連接數(shù) ?? ? ? ? ? ? ??? ? ? ? ? ? ds.setMaxStatements(100);//設(shè)置連接池的緩存Statement的最大數(shù) ? ? ? ? ? ? ?? ? ? ? } catch (Exception e) { ?? ? ? ? ? ? e.printStackTrace(); ?? ? ? ? } ?? ? } ?? ??? ??? ? //定義一個獲取數(shù)據(jù)庫連接的方法? ? public static Connection getConnection(){? ? ? ??? ? ? ? try {? ? ? ? conn = ds.getConnection(); ?? ? ? ? } catch (SQLException e) {? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? System.out.println("獲取連接失敗");? ? ? ? }? ? ? ? return conn;? ? }? ??? ? /**? ? ?* 關(guān)閉數(shù)據(jù)庫連接? ? ?* @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("數(shù)據(jù)庫連接成功"); try { c.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ System.out.println("數(shù)據(jù)庫連接失敗"); } }}這是小弟的數(shù)據(jù)庫連接池代碼發(fā)現(xiàn)每次運(yùn)行項目都會向數(shù)據(jù)庫要好多個連接,而不是在已有的連接里面復(fù)用。知道超過最大連接數(shù)后,整個程序就卡死了是哪邊沒寫對嗎
添加回答
舉報
0/150
提交
取消