Java——Web開發之開源的資料庫連線池(C3P0與DBCP)的使用
阿新 • • 發佈:2018-11-27
緊接上一篇資料庫連線池的學習,點連線直達~ 資料庫連線池的簡單理解與使用
資料庫連線池DBCP程式碼連線與配置檔案:
1.先匯入使用的jar檔案,分別是dbcp.jar與pool.jar檔案
2.分別使用兩種方式實現,使用配置檔案(dbcpconfig.properties)的方式與不使用配置檔案的方式。
TestDbcp.java
package dbcp; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import org.junit.Test; import util.JDBCUtil; public class TestDbcp { @Test public void Test1(){ Connection conn=null; PreparedStatement prepareStatement = null; try { //1.構建資料來源物件 BasicDataSource bds=new BasicDataSource(); //連線的資料庫,資料庫型別,使用者名稱,密碼 bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql://localhost/stum"); bds.setUsername("root"); bds.setPassword("123"); //2.得到連線物件 conn=bds.getConnection(); String sql="insert into account values(null,?,?)"; prepareStatement = conn.prepareStatement(sql); prepareStatement.setString(1, "zzz"); prepareStatement.setInt(2, 5000); prepareStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ JDBCUtil.release(conn, prepareStatement); } } @Test public void test2(){ Connection conn=null; PreparedStatement prepareStatement = null; try { //1.構建資料來源物件 BasicDataSourceFactory bdsf=new BasicDataSourceFactory(); Properties properties=new Properties(); InputStream is=new FileInputStream("src//dbcpconfig.properties"); properties.load(is); DataSource ds=bdsf.createDataSource(properties); //2.得到連線物件 conn=ds.getConnection(); String sql="insert into account values(null,?,?)"; prepareStatement = conn.prepareStatement(sql); prepareStatement.setString(1, "hhh"); prepareStatement.setInt(2, 2000); prepareStatement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally{ JDBCUtil.release(conn, prepareStatement); } } }
配置檔案:dbcpconfig.properties
#連線設定 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/stum username=root password=123 #<!-- 初始化連線 --> initialSize=10 #最大連線數量 maxActive=50 #<!-- 最大空閒連線 --> maxIdle=20 #<!-- 最小空閒連線 --> minIdle=5 #<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒 --> maxWait=60000 #JDBC驅動建立連線時附帶的連線屬性屬性的格式必須為這樣:[屬性名=property;] #注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這裡不需要包含他們。 connectionProperties=useUnicode=true;characterEncoding=gbk #指定由連線池所建立的連線的自動提交(auto-commit)狀態。 defaultAutoCommit=true #driver default 指定由連線池所建立的連線的事務級別(TransactionIsolation)。 #可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE defaultTransactionIsolation=READ_UNCOMMITTED
資料庫連線池C3P0程式碼連線與配置檔案:
1.先匯入使用的jar檔案,分別是c3p0.jar檔案
2.分別使用兩種方式實現,使用配置檔案(c3p0-config.xml)的方式與不使用配置檔案的方式。
TestC3p0.java
package c3p0; import java.sql.Connection; import java.sql.PreparedStatement; import org.junit.Test; import util.JDBCUtil; import com.mchange.v2.c3p0.ComboPooledDataSource; public class TestC3p0 { @Test public void test1(){ Connection conn=null; PreparedStatement prepareStatement = null; try { //1.建立datasource ComboPooledDataSource cpds=new ComboPooledDataSource(); //2.設定連結資料的資訊 cpds.setDriverClass("com.mysql.jdbc.Driver"); cpds.setJdbcUrl("jdbc:mysql://localhost/stum"); cpds.setUser("root"); cpds.setPassword("123"); //2.得到連線物件 conn=cpds.getConnection(); String sql="insert into account values(null,?,?)"; prepareStatement = conn.prepareStatement(sql); prepareStatement.setString(1, "abc"); prepareStatement.setInt(2, 2345); prepareStatement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally{ JDBCUtil.release(conn, prepareStatement); } } @Test public void test2(){ Connection conn=null; PreparedStatement prepareStatement = null; try { //1.建立datasource ComboPooledDataSource cpds=new ComboPooledDataSource(); //預設會找default //ComboPooledDataSource cpds=new ComboPooledDataSource("oracle"); //使用的是oracle資料庫 //2.得到連線物件 conn=cpds.getConnection(); String sql="insert into account values(null,?,?)"; prepareStatement = conn.prepareStatement(sql); prepareStatement.setString(1, "fgh"); prepareStatement.setInt(2, 3567); prepareStatement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally{ JDBCUtil.release(conn, prepareStatement); } } }
配置檔案:c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- default-config 預設的配置, -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost/stum</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<!-- This app is massive! -->
<named-config name="oracle">
<property name="acquireIncrement">50</property>
<property name="initialPoolSize">100</property>
<property name="minPoolSize">50</property>
<property name="maxPoolSize">1000</property>
<!-- intergalactoApp adopts a different approach to configuring statement caching -->
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property>
<!-- he's important, but there's only one of him -->
<user-overrides user="master-of-the-universe">
<property name="acquireIncrement">1</property>
<property name="initialPoolSize">1</property>
<property name="minPoolSize">1</property>
<property name="maxPoolSize">5</property>
<property name="maxStatementsPerConnection">50</property>
</user-overrides>
</named-config>
</c3p0-config>