用池來管理 Connection, 這可以重複使用 Connection。有了池,所以我們就不用自己來創建 Conneciton, 而是通過池來獲取 Connection 對象。當使用完 Conncetion 後,調用 Connection 的 close() 方法也不會真的關閉 Connection, 而是把 Connection "歸還" 給池。池就可以再利用這個 Connection 對象。
池參數(所有池參數都有默認值):
- 初始大小
- 最小空閒連接數
- 增量
- 最大空閒連接數
- 最大連接數
- 最大等待時間
四大連接參數(必須配置)
- 連接池也是使用四大連接參數來完成創建連接對象。
實現的接口
- 連接池必須實現: javax.sql.DataSource 接口。
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;
import org.junit.Test;
/**
* dbcp 連接池
* @author jack870131
*
*/
public class Demo7 {
@Test
public void fun1() throws SQLException {
/*
* 1. 創建連接對象
* 2. 配置四大參數
* 3. 配置池參數
* 4. 得到連接對象
*/
//四大參數
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mysql");
dataSource.setUsername("root");
dataSource.setPassword("tyler0131");
//池參數
dataSource.setMaxActive(20);
dataSource.setMinIdle(3);
dataSource.setMaxWait(1000);
//得到連接對象
Connection con = dataSource.getConnection();
System.out.println(con.getClass().getName());
/**
* 連接池內部使用了四大參數創建了連接對象,即 mysql 驅動提供的 Connection
* 連接池使用 mysql 的連接對象進行了裝飾,只對 close() 方法進行了增強
* 裝飾之後的 Connection 的 close() 方法,用來把當前連接歸還給池
*/
con.close(); //把連接歸還給池
}
}