資料庫連線的兩種實現方式(讀取配置檔案)——DBCP&C3P0;DBCP實現連線程式碼,C3P0實現連線程式碼——包含完整程式碼
阿新 • • 發佈:2019-02-08
兩種資料庫連線實現方式
第一種方式:DBCP
DBCP使用流程
- 導jar包
- 使用DBCP建立資料庫連線物件
DataSource ds=BasicDataSourceFactory.createDatasource("一個儲存連線資訊的properties集合");- 使用DataSource,呼叫連線池物件的getConnection方法
編寫的.properties檔案:dbcpconfig.properties
#連線設定 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/demobase username=root password=root
JDBCUtils中的程式碼:
Test中的程式碼:public class JDBCUtils { private static DataSource ds; //DatatSource 物件只會建立一個 static { try { //建立DBCP的資料庫連線物件 //1、獲取配置檔案對應的輸入流 InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); //2、將流中資料讀入集合 Properties pro = new Properties(); pro.load(in); ds = BasicDataSourceFactory.createDataSource(pro); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } } public static DataSource getDs(){ return ds; } }
public class Test { public static void main(String[] args) throws Exception { Connection con = JDBCUtils.getDs().getConnection(); //使用連線 PreparedStatement ps = con.prepareStatement("select * from teacher"); ResultSet rs = ps.executeQuery(); while(rs.next()){ System.out.println(rs.getString(1) + " " + rs.getString(2)); } //關閉 rs.close(); ps.close(); //和以前不同 con.close(); } }
第二種方式:C3P0
C3P0使用流程:
- 導jar包
- 使用C3P0建立對應的資料庫連線對稱
DataSource ds=new ComboPooledDataSource();
注意:
·雖然有配置檔案,但是配置檔案沒有位元組讀取,c3p0會自動讀取配置檔案,此過程隱藏了;
·儲存配置檔案存在的路徑在src中, 其實複製到bin目錄下面了,真正讀取是從bin目錄下查詢的;
·配置檔案的檔名必須固定,即 c3p0-config.xml; - 具體的連線物件使用與DBCP一樣
編寫的XML檔案:c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 預設配置,如果沒有指定則使用這個配置
預設配置最常用
建議放在最開頭。
放其他地方也沒問題
-->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/demobase</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</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>
<user-overrides user="test-user">
<property name="maxPoolSize">10</property>
<property name="minPoolSize">1</property>
<property name="maxStatements">0</property>
</user-overrides>
</default-config>
JDBCUtils中的程式碼:public class JDBCUtils {
//1、讀取配置資訊
private static DataSource ds = new ComboPooledDataSource();
public static DataSource ds(){
return ds;
}
}
Test中的程式碼:
public class Test {
public static void main(String[] args) throws Exception {
Connection con = JDBCUtils.ds().getConnection();
//使用連線
PreparedStatement ps = con.prepareStatement("select * from teacher");
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
//關閉
rs.close();
ps.close();
//和以前不同
con.close();
}
}