1. 程式人生 > >JDBC學習05-DBCP連線池:下載和使用方法

JDBC學習05-DBCP連線池:下載和使用方法

一、DBCP連線池簡介
DBCP(DataBase Connection Pool)資料庫連線池,是java資料庫連線池的一種,由Apache開發,通過資料庫連線池,可以讓程式自動管理資料庫連線的釋放和斷開。
二、DBCP連線池的使用方法
0.下載
使用DBCP連線池匯入相關的包(注意dbcp2和dbcp1對jdk版本要求是不一樣的)。除此之外還需要comms-logging包和commons-pool2包,這些包都可以在Apache官網下載。同時mysql-connector包版本要在5.0以上,否則使用時會報錯。下載地址:http://commons.apache.org/proper/
這裡寫圖片描述
這裡寫圖片描述


這裡寫圖片描述
·下載相應的Binaries二進位制包,注意windows下載.zip格式,linux下載.tar.gz格式。
1.在專案中匯入相應的jar包
這裡寫圖片描述
2.編寫配置檔案
配置檔名稱:檔名.properties
配置檔案位置:任意,建議CLASSPATH
配置檔案內容:按照properties檔案格式

示例:

#基本的設定
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?useSSL=true
username=root
password=anitamui

#初始化時連線池中connection數量
initialSize=10 #最大連線數量 maxActive=50 #最大的空閒連線數量 maxIdle=20 #最小的空閒連結數量 minIdle=5 #最大的等待時間,單位是毫秒 maxWait=60000 #建立連線時的附加引數,如果指定的編碼不一致資料庫中會出現亂碼 connectionProperties=useUnicode=true;characterEncoding=utf8 #是否開啟自動提交,跟事務的控制有關 defaultAutoCommit=true #指定由連線池所建立的連線的事務隔離級別(TransactionIsolation)。 defaultTransactionIsolation=REPEATABLE_READ

4.編寫工具類

import org.apache.commons.dbcp2.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DBCPUtils {
    private static DataSource dataSource;
    static{
        try {
            //1.載入properties配置檔案
            InputStream is = DBCPUtils.class.getClassLoader().getResourceAsStream("db.properties");
            //2.載入輸入流
            Properties props = new Properties();
            props.load(is);
            //3.建立資料來源
            dataSource = BasicDataSourceFactory.createDataSource(props);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 獲取dataSource方法
     * @return
     */
    public static DataSource getDataSource(){
        return dataSource;
    }

    /**
     * 獲得連線
     * @return
     */
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 釋放資源
     * @param connection
     */
    public static void releaseConnection(Connection connection, PreparedStatement pstmt, ResultSet rs){
        try {
            if(rs != null ) {
                rs.close();
            }
            if(pstmt != null ) {
                pstmt.close();
            }
            if(connection != null ) {
                connection.close();
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

測試:

  @Test
    public void testDBCPUtils(){
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try{
            conn = DBCPUtils.getConnection();
            String sql = "SELECT * FROM fruits WHERE s_id=?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1,104);
            rs = pstmt.executeQuery();
            while(rs.next()){
                System.out.println(rs.getString("f_name"));
            }
        }
        catch (Exception e){
            throw new RuntimeException(e);
        } finally {
            DBCPUtils.releaseConnection(conn,pstmt,rs);
        }
    }

這裡寫圖片描述