這個緣由與爲何使用線程池有點類似,都是爲了提升資源的利用率,減小申請時間的浪費,提升程序的運行效率。
數據庫鏈接池的基本思想就是爲數據庫鏈接創建一個「緩衝池」。預先在緩衝池中放入必定數量的鏈接,當須要創建數
據庫鏈接時,只需從「緩衝池」中取出一個,使用完畢以後再放回去。咱們能夠經過設定鏈接池最大鏈接數來防止系統
無盡的與數據庫鏈接。java
1.1 資源的重用
數據庫鏈接池中的鏈接能夠重複使用,避免頻繁的建立,大大減小了性能的開銷,即減小了系統的消耗,也增長了系統環境運行的平穩性
1.2提升系統的反應速度
s數據庫鏈接池在初始化的過程當中,每每已經建立了若干數據庫鏈接置於鏈接池中備用,在由業務要使用的時候能夠直接拿來使用,避免了初始化和釋放過程的時間開銷,從而減小了系統的響應時間
1.3新的資源分配手段
當多個應用共用一個數據庫的時候,能夠在應用層經過數據庫鏈接池的配置,實現某一應用最大數據庫鏈接數的限制,避免某一應用佔用過多的資源
1.4統一鏈接管理,避免數據庫的鏈接泄露
數據庫鏈接池中可設置超時佔用設定,強制收回被佔用的鏈接,避免常規數據庫鏈接操做中可能出現的資源泄露mysql
C3P0 是一個開源組織提供的一個數據庫鏈接池,速度相對較慢,穩定性還能夠。hibernate官方推薦使用sql
Druid 是阿里提供的數據庫鏈接池,聽說是集DBCP 、C3P0 、Proxool 優勢於一身的數據庫鏈接池,可是速度不肯定是否有BoneCP快,聽說是目前最吊的數據庫鏈接池之一數據庫
*** 步驟:**
1. 導入jar包 (兩個) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
* 不要忘記導入數據庫驅動jar包
2. 定義配置文件:
* 名稱: c3p0.properties 或者 c3p0-config.xml
* 路徑:直接將文件放在src目錄下便可。函數
3. 建立核心對象 數據庫鏈接池對象 ComboPooledDataSource 4. 獲取鏈接: getConnection
配置文件:工具
<c3p0-config> <!-- 使用默認的配置讀取鏈接池對象 --> <default-config> <!-- 鏈接參數 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3309/db2</property> //數據庫用戶名 <property name="user">root</property> //密碼 <property name="password">1234</property> <!-- 鏈接池參數 --> //初始化鏈接數 <property name="initialPoolSize">5</property> //最大鏈接數 <property name="maxPoolSize">10</property> //最長的超時鏈接時間 <property name="checkoutTimeout">3000</property> </default-config> //本身定義的配置 <named-config name="otherc3p0"> <!-- 鏈接參數 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property> <property name="user">root</property> <property name="password">root</property> <!-- 鏈接池參數 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">8</property> <property name="checkoutTimeout">1000</property> </named-config> </c3p0-config>
java代碼性能
package JDBC; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class C3P0 { public static void main(String[] args) throws SQLException { //建立數據庫鏈接池 DataSource ds = new ComboPooledDataSource(); //獲取鏈接對象 Connection connection = ds.getConnection(); //定義sql語句 String sql="update count set money=0"; //獲取statement對象 PreparedStatement preparedStatement = connection.prepareStatement(sql); //執行 int i = preparedStatement.executeUpdate(); System.out.println(i); //關閉statement,歸還connection preparedStatement.close(); connection.close(); } }
1.導入jar包
導入jar包 druid-1.0.9.jar
2.定義配置文件
是properties形式的
能夠叫任意名稱,能夠放在任意目錄下
3.加載配置文件
4.獲取數據庫鏈接池對象
經過工廠來來獲取 DruidDataSourceFactory
5.獲取鏈接
getConnection大數據
配置文件ui
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3309/db2 username=root password=1234 //初始化鏈接數 initialSize=5 //最大鏈接數 maxActive=10 //最長等待時間 maxWait=3000
工具類url
package JDBC; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class DruidUtils { private static DataSource dataSource=null; //獲取數據庫鏈接池 public static DataSource getDataSource() { return dataSource; } //關閉statement,歸還connection public static void close(Statement statement, Connection connection){ if (statement!=null){ try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection!=null){ try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void setDataSource(DataSource dataSource) { DruidUtils.dataSource = dataSource; } static { try { //加載配置文件經內存 Properties properties = new Properties(); InputStream resourceAsStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(resourceAsStream); dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (IOException e) { System.out.println(e); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } }
主函數
package JDBC; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class Druid { public static void main(String[] args) throws SQLException { //獲取鏈接對象 Connection connection = DruidUtils.getConnection(); //定義sql執行語句 String sql="update count set money=10"; //獲取statement對象 PreparedStatement preparedStatement = connection.prepareStatement(sql); //執行語句 preparedStatement.executeUpdate(); //關閉 DruidUtils.close(preparedStatement,connection); } }