1. 程式人生 > 其它 >c3p0的配置及簡單應用

c3p0的配置及簡單應用

首先簡單瞭解一下JDBC和c3p0

Java資料庫連線,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規範客戶端程式如何來訪問資料庫的應用程式介面,提供了諸如查詢和更新資料庫中資料的方法。JDBC也是Sun Microsystems的商標。我們通常說的JDBC是面向關係型資料庫的。

C3P0是一個開源的JDBC連線池,它實現了資料來源和JNDI繫結,支援JDBC3規範和JDBC2的標準擴充套件。目前使用它的開源專案有Hibernate、Spring等。

在JDBC專案中,如果需要多個連線,如果一直獲取連線再斷開連線,會造成資源的極大浪費和佔用。而在c3p0專案中,c3p0它有一個數據庫池是用來管理客戶端和資料庫連線(Connection),有了這個池我們就不用自己來建立Connection,也不用擔心頻繁的連線斷開操作造成的系統資源浪費很大,通過池來獲取Connection物件,當使用完後,進行的資源釋放c3po_utils.release(rs,conn,pstm)並不是直接把程序直接關掉,而是把從連線池佔用的資源又還回去給池。

配置c3p0

首先

  下載官網c3p0:https://sourceforge.net/projects/c3p0/

  開啟下載好的c3p0資料夾下的lib目錄,可以看到c3p0-0.9.5.5.jar和mchange-commons-java-0.2.19.jar兩個jar包

這裡以IDEA為例

第二步,成功匯入包後,我們配置一下c3p0的配置檔案,c3p0不在properties檔案中配置,而是在xml中配置

  在src下新建c3p0_config.xml檔案

在新建好的c3p0_config.xml中加入配置

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 預設配置,如果沒有指定則使用這個配置 -->
    <default
-config>
  //以下是資料庫使用者名稱、密碼、被操作的資料表名地址、驅動類 <property name="user">root</property> <property name="password">root</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/users</property> <property name="driverClass">com.mysql.jdbc.Driver</property>   //最大連線數、最小連線數、一次增長個數、初始可連線數 <property name="maxPoolSize">100</property> <property name="minPoolSize">2</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">3</property>   //最大等待連線時間、空閒連線測試個數、最大空閒時間、最大預快取數   <property name="checkoutTimeout">30000</property> <property name="idleConnectionTestPeriod">30</property> <property name="maxIdleTime">30</property> <property name="maxStatements">200</property> </default
-config> <!-- 命名的配置,可以通過方法呼叫實現 --> <named-config name="Mysql"> <property name="user">root</property> <property name="password">root</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/users?useUnicode=true&amp;characterEncodeing=utf8&amp;useSSL=true</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 如果池中資料連線不夠時一次增長多少個 --> <property name="acquireIncrement">5</property> <!-- 初始化資料庫連線池時連線的數量 --> <property name="initialPoolSize">20</property> <!-- 資料庫連線池中的最大的資料庫連線數 --> <property name="maxPoolSize">25</property> <!-- 資料庫連線池中的最小的資料庫連線數 --> <property name="minPoolSize">5</property> </named-config> </c3p0-config>

編寫c3p0工具類utils

package com.lsq.Utils_Study.Utils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class c3p0_Utils { public static DataSource dataSource = null; static { try { //建立資料來源工廠模式 dataSource = new ComboPooledDataSource("Mysql");//配置檔案寫法 }catch (Exception e){ e.printStackTrace(); } } //獲取連線 public static Connection getConnection() throws SQLException{ return dataSource.getConnection();//從資料來源中獲取連線 } //釋放系統資源 public static void release(ResultSet rs, Connection conn, PreparedStatement pstm){ if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstm!=null){ try { pstm.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

測試c3p0連線是否成功

package com.lsq;

import com.lsq.Utils_Study.Utils.c3p0_Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class c3p0_test {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;

        try {
            conn = c3p0_Utils.getConnection();
            String sql = "select * from users where id=?";
            pstm = conn.prepareStatement(sql);
            pstm.setInt(1,1);
            rs = pstm.executeQuery();
            if (rs.next()){
                System.out.println("查詢成功");
                System.out.println(rs.getString("NAME"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            c3p0_Utils.release(rs,conn,pstm);
        }
    }
}