DBUtil工具類的設計
私有化構造方法,防止被new(很重要)
暴露一些public的方法給外界調用(很重要)
有這麼兩步之後,工具類基本就完成了
·爲什麼要使用連接池?
在應用中,與數據建立連接,操作數據庫,關閉連接。這是一件很耗費資源的。爲了合理的使用資源,誕生了連接池這個東西
1.什麼是連接池
連接池,顧名思義 存放連接的池子。其作用就是連接池與數據庫建立長久的連接,當我們需要操作數據庫的時候,不再是去主動建立連接,而是去連接池中獲取鏈接,操作完成後,釋放當前連接,資源回到連接池中,資源再利用!如此的效率提升了,但是問題來了
2.連接池中可以存放多少連接?當前連接被使用完畢後該怎麼辦?
連接池中的連接在第一次和數據庫連接的時候已經申請了一些數量的連接。當前連接超過最大連接數時,連接池可以再一次向數據申請連接,此操作在配置文件中配置即可
連接池配置文件 dhcp.properties driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/shopping username= password= #<!-- 初始化連接 --> dataSource.initialSize=10 #<!-- 最大空閒連接 --> dataSource.maxIdle=20 #<!-- 最小空閒連接 --> dataSource.minIdle=5 #最大連接數量 dataSource.maxActive=50 #是否在自動回收超時連接的時候打印連接的超時錯誤 dataSource.logAbandoned=true #是否自動回收超時連接 dataSource.removeAbandoned=true #超時時間(以秒數爲單位) dataSource.removeAbandonedTimeout=180 #<!-- 超時等待時間以毫秒爲單位 6000毫秒/1000等於60秒 --> dataSource.maxWait=1000 工具類代碼
DBUtil.java
import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import com.store.shopping.exception.DBException; public class DBUtil { private static DataSource dataSource; //私有化構造方法 private DBUtil() { } static { /** JDBC操作數據庫: 口訣(思路): 賈璉欲執事. 步驟: 1.加載註冊驅動. 2.獲取連接對象:Connection. 3.獲取語句對象. 4.執行SQL語句. 5.釋放資源. */ // 讀取資源文件 try { Properties properties = new Properties(); InputStream inputStream = Thread.currentThread() .getContextClassLoader().getResourceAsStream("dhcp.properties"); properties.load(inputStream);//加載資源 //使用工廠生產datasource dataSource = BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { throw new DBException("文件沒找到:dhcp.properties"); } } //暴露給外界調用的方法 public static DataSource getDataSource () { return dataSource ; }
測試代碼
@Test public void testConnection() throws Exception { System.out.println(DBUtil.getDataSource().getConnection()); }
測試結果
jdbc:mysql://localhost:3306/shopping, UserName=sa@localhost, MySQL Connector Java