1. 程式人生 > >連線池的作用以及建立

連線池的作用以及建立

連線池的作用就是用來管理連線,提升連線的利用效率

hibernate中連線池如何配置

	<!-- 1. 資料庫連線配置 -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">abc</property>
	<!-- 
		資料庫方法配置, hibernate在執行的時候,會根據不同的方言生成符合當前資料庫語法的sql
	 -->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
	<!-- 2. 其他相關配置 -->
	<!-- 2.1 顯示hibernate在執行時候執行的sql語句 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 2.2 格式化sql
	<property name="hibernate.format_sql">true</property>  -->
	<!-- 2.3 自動建表  -->
	<property name="hibernate.hbm2ddl.auto">update</property>
	
	<!-- *********連線池配置*********** -->
	<!-- 配置連線池驅動管理類 -->
	<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
	<!-- 配置連線池引數資訊 -->
	<property name="hibernate.c3p0.max_size">5</property>	<!-- 最大連線數 -->
	<property name="hibernate.c3p0.min_size">2</property>	<!-- 最小連線數 -->
	<property name="hibernate.c3p0.timeout">5000</property>	<!-- 超時時間 -->
	<property name="hibernate.c3p0.max_statements">100</property>	<!-- 最大執行的命令格個數 -->
	<property name="hibernate.c3p0.idle_test_period">30000</property> <!-- 空閒測試時間 -->
	<property name="hibernate.c3p0.acquire_increment">2</property>	<!-- 連線不夠用時,每次增加的個數 -->
	<!-- 
		#hibernate.c3p0.max_size 2
		#hibernate.c3p0.min_size 2
		#hibernate.c3p0.timeout 5000
		#hibernate.c3p0.max_statements 100
		#hibernate.c3p0.idle_test_period 3000
		#hibernate.c3p0.acquire_increment 2
		#hibernate.c3p0.validate false
	 -->
	 
</session-factory>
2)hibernate使用C3P0連線池,除了hibernate的jar包,當然還要匯入C3P0jar包了(如:c3p0-0.9.1.2.jar),否則報錯.

JDBC配置連線池 示例C3p0

try{  
            ComboPooledDataSource source = new ComboPooledDataSource();  
            source.setDriverClass("com.mysql.jdbc.Driver");  
            source.setJdbcUrl("jdbc:mysql:///day11");  
            source.setUser("root");  
            source.setPassword("root");  
              
            conn = source.getConnection();  
            ps = conn.prepareStatement("select * from account");  
            rs = ps.executeQuery();  
            while(rs.next()){  
                String name = rs.getString("name");  
                System.out.println(name);  
            }  
        }catch (Exception e) {  
            e.printStackTrace();  
        }finally{  
            if(rs!=null){  
                try {  
                    rs.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }finally{  
                    rs = null;  
                }  
            }  
            if(ps!=null){  
                try {  
                    ps.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }finally{  
                    ps = null;  
                }  
            }  
            if(conn!=null){  
                try {  
                    conn.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }finally{  
                    conn = null;  
                }  
            }  
        }  
    }  

第二種方式 創建出c3p0的配置檔案 然後載入

<?xml version="1.0" encoding="utf-8"?>  
<c3p0-config>  
  <default-config>  
    <property name="driverClass">com.mysql.jdbc.Driver</property>  
    <property name="jdbcUrl">jdbc:mysql:///c3p0test</property>  
    <property name="user">root</property>  
    <property name="password">root</property>  
  </default-config>  
  <named-config name="mysql2">   
    <property name="driverClass">com.mysql.jdbc.Driver</property>  
    <property name="jdbcUrl">jdbc:mysql:///c3p0test1</property>  
    <property name="user">root</property>  
    <property name="password">root</property>  
  </named-config>  

C3p0的使用較為簡單,通常來說只要在src目錄下新增一個c3p0的配置檔案,在程式中使用一句程式碼

1)ComboPooledDataSource source = new ComboPooledDataSource()使用配置檔案中的預設配置,或者

2)ComboPooledDataSource source = new ComboPooledDataSource(“配置檔案中name-config的名稱”)使用配置檔案中的其他配置

第二種連線池的建立DBCP

一、導包

Apache官網下載DBCP包,匯入兩個包路徑如下:

commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:連線池的實現

commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:連線池實現的依賴庫

//獲取BasicDataSource並配置,開始....  
        BasicDataSource source = new BasicDataSource();  
    source.setDriverClassName("com.mysql.jdbc.Driver");  
    source.setUrl("jdbc:mysql:///dbcptest");  
    source.setUsername("root");  
    source.setPassword("root");  
//獲取BasicDataSource並配置,結束......  
    try {  
            conn = source.getConnection();  
            ps = conn.prepareStatement("select * from account");  
            rs = ps.executeQuery();  
            while (rs.next()) {  
                String name = rs.getString("name");  
                System.out.println(name);  
            }   
     } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            if (rs != null) {  
                try {  
                    rs.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                } finally {  
                    rs = null;  
                }  
            }  
            if (ps != null) {  
                try {  
                    ps.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                } finally {  
                    ps = null;  
                }  
            }  
            if (conn != null) {  
                try {  
                    conn.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                } finally {  
                    conn = null;  
                }  
            }  
        }  

方式二:使用BasicDataSourceFactory +配置檔案

try {               //獲取並配置DataSource開始  
        Properties prop = new Properties();  
        prop.load(new FileReader("dbcp.properties"));  
        BasicDataSourceFactory factory = new BasicDataSourceFactory();  
        DataSource source = factory.createDataSource(prop);  
    //獲取並配置DataSource,結束  
        conn = source.getConnection();  
        ps = conn.prepareStatement("select * from account");  
        rs = ps.executeQuery();  
        while (rs.next()) {  
            String name = rs.getString("name");  
            System.out.println(name);  
        }  
    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        if (rs != null) {  
            try {  
                rs.close();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            } finally {  
                rs = null;  
            }  
        }  
        if (ps != null) {  
            try {  
                ps.close();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            } finally {  
                ps = null;  
            }  
        }  
        if (conn != null) {  
            try {  
                conn.close();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            } finally {  
                conn = null;  
            }  
        }  
    }  

#連線設定

  driverClassName=com.mysql.jdbc.Driver  
    url=jdbc:mysql://localhost:3306/jdbc  
    username=root  
    password=  
       
#<!-- 初始化建立的連線數,當不夠時再去建立 -->  
initialSize=10  
   
#最大連線數量,連線數連不能超過該值  
maxActive=50  
   
#<!-- 最大空閒連線,當空閒連線超過該值時就挨個關閉多餘的連線,但不能小於minldle -->  
maxIdle=20  
   
#<!-- 最小空閒連線,空閒連線的最下值 -->  
minIdle=5  
   
#<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒,當連線超過該時間便認為其實空閒連線 -->  
maxWait=60000  
   
   
#JDBC驅動建立連線時附帶的連線屬性屬性的格式必須為這樣:[屬性名=property;]   
#注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這裡不需要包含他們。  
connectionProperties=useUnicode=true;characterEncoding=gbk  
   
#指定由連線池所建立的連線的自動提交(auto-commit)狀態。  
defaultAutoCommit=true  
   
#driver default 指定由連線池所建立的連線的事務級別(TransactionIsolation)。  
#可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE  
defaultTransactionIsolation=READ_UNCOMMITTED  

還有一種就是tomcat內建資料來源(暫未深瞭解)