1. 程式人生 > >資料庫連線池的學習(二)——DBCP連線池

資料庫連線池的學習(二)——DBCP連線池

       DBCP(DataBase connection pool),資料庫連線池。是 apache 上的一個 java 連線池專案,也是 tomcat 使用的連線池元件。單獨使用dbcp需要2個包:commons-dbcp.jar,commons-pool.jar。

       由於建立資料庫連線是一個非常耗時耗資源的行為,所以通過連線池預先同資料庫建立一些連線,放在記憶體中,應用程式需要建立資料庫連線時直接到連線池中申請一個就行,用完後再放回去。

commons-dbcp.jar:連線池的實現

commons-pool.jar:連線池實現的依賴庫

首先測試硬編碼的方式進行測試:

import org.apache.commons.dbcp.BasicDataSource;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBCP1 {
    //硬編碼方式,就是在程式碼中新增配置
    @Test
    public void t() throws SQLException {
        BasicDataSource bds = new BasicDataSource();
        bds.setDriverClassName("com.mysql.jdbc.Driver");
        bds.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8");
        bds.setUsername("root");
        bds.setPassword("1234");
        Connection conn = bds.getConnection();
        PreparedStatement ps = conn.prepareStatement("select * from students");
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
            String sname = rs.getString("sname");
            System.out.println(sname);
        }
        conn.close();



    }
}

 

接著使用軟編碼的方式:

先寫一個配置檔案:info.properties

#\u8FDE\u63A5\u8BBE\u7F6E
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
username=root
password=1234
#<!-- 初始化連線 -->
initialSize=10
#最大連線數量
maxActive=50
#<!-- 最大空閒連線 -->
maxIdle=20
#<!-- 最小空閒連線 -->
minIdle=5
#<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒 -->
maxWait=60000

程式碼展示:

import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;

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

public class DBCP2 {
    @Test
    public void t() throws Exception {
        BasicDataSourceFactory bdsf = new BasicDataSourceFactory();
        Properties p = new Properties();
        InputStream is = BasicDataSourceFactory.class.getResourceAsStream("/info.properties");
        p.load(is);
        DataSource ds = bdsf.createDataSource(p);
        Connection conn = ds.getConnection();
        PreparedStatement ps = conn.prepareStatement("select * from students");
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
            String sname = rs.getString("sname");
            System.out.println(sname);
        }

        conn.close();  //回收物件
    }


}