1. 程式人生 > >資料庫連線的兩種實現方式(讀取配置檔案)——DBCP&C3P0;DBCP實現連線程式碼,C3P0實現連線程式碼——包含完整程式碼

資料庫連線的兩種實現方式(讀取配置檔案)——DBCP&C3P0;DBCP實現連線程式碼,C3P0實現連線程式碼——包含完整程式碼

兩種資料庫連線實現方式

第一種方式:DBCP

DBCP使用流程

  1. 導jar包
  2. 使用DBCP建立資料庫連線物件
    DataSource ds=BasicDataSourceFactory.createDatasource("一個儲存連線資訊的properties集合");
  3. 使用DataSource,呼叫連線池物件的getConnection方法

編寫的.properties檔案:dbcpconfig.properties

#連線設定
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demobase
username=root
password=root


JDBCUtils中的程式碼:
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;
	}
}
Test中的程式碼:
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使用流程:

  1. 導jar包
  2. 使用C3P0建立對應的資料庫連線對稱
    DataSource ds=new ComboPooledDataSource();
    注意:
    ·雖然有配置檔案,但是配置檔案沒有位元組讀取,c3p0會自動讀取配置檔案,此過程隱藏了;
    ·儲存配置檔案存在的路徑在src中, 其實複製到bin目錄下面了,真正讀取是從bin目錄下查詢的;
    ·配置檔案的檔名必須固定,即 c3p0-config.xml;
  3. 具體的連線物件使用與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();
	}
}