JDBC學習05-DBCP連線池:下載和使用方法
阿新 • • 發佈:2019-01-26
一、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);
}
}