java中的DBCP數據源,與c3p0數據源類似,需要讀取的配置文件dbcpconfig.properties
#連接設置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
#<!-- 初始化連接 -->
initialSize=10
#最大連接數量
maxActive=50
#<!-- 最大空閒連接 -->
maxIdle=20
#<!-- 最小空閒連接 -->
minIdle=5
#<!-- 超時等待時間以毫秒爲單位 6000毫秒/1000等於60秒 -->
maxWait=60000
#JDBC驅動建立連接時附帶的連接屬性屬性的格式必須爲這樣:[屬性名=property;]
#注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這裏不需要包含他們。
connectionProperties=useUnicode=true;characterEncoding=utf8
#指定由連接池所創建的連接的自動提交(auto-commit)狀態。
defaultAutoCommit=true
#driver default 指定由連接池所創建的連接的只讀(read-only)狀態。
#如果沒有設置該值,則“setReadOnly”方法將不被調用。(某些驅動並不支持只讀模式,如:Informix)
defaultReadOnly=
#driver default 指定由連接池所創建的連接的事務級別(TransactionIsolation)。
#可用值爲下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_COMMITTED
Dbutils.java
//需要導入的jar包:commons-dbcp-1.2.2.jar,commons-pool-1.3.jar
public class JdbcUtils {
private static DataSource ds = null; //數據源
static{
try{
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); //讀取數據庫的配置文件,在classpath下
Properties prop = new Properties();
prop.load(in); //加載dbconfig.properties文件
BasicDataSourceFactory factory = new BasicDataSourceFactory();
ds = factory.createDataSource(prop); //返回數據源
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException{
return ds.getConnection(); //從連接池返回一個鏈接
}
public static void release(Connection conn,Statement st,ResultSet rs){ //釋放數據庫的鏈接
if(rs!=null){
try{
rs.close(); //ds.getConnection()返回的connection一定對原生的connection中的close方法增強處理,
//將數據庫鏈接資源歸還到連接池而不是歸還給數據庫
}catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if(st!=null){
try{
st.close();
}catch (Exception e) {
e.printStackTrace();
}
st = null;
}
if(conn!=null){
try{
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
test.java
//測試方法
public static void update(String sql,Object params[]) throws SQLException{
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
String sql = "";
try{
conn = getConnection(); //得到的是從連接池獲得的鏈接,ds.getConnection();
st = conn.prepareStatement(sql);
st.executeUpdate();
}finally{
release(conn, st, rs); //將數據庫鏈接資源歸還到連接池而不是歸還給數據庫
}
}