c3p0连接池脱离Hibernate使用

package com.test;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.DataSources;

public class Cat {
    public static void main(String[] argv) { 
        try { 
            Class.forName("com.mysql.jdbc.Driver"); 
            DataSource unpooled = DataSources
                    .unpooledDataSource( 
                            "jdbc:mysql://127.0.0.1:3306/test", 
                            "root", ""); 
            DataSource pooled = DataSources.pooledDataSource(unpooled); 
            Connection con = null; 
            Statement stmt = null; 
            ResultSet rs = null; 
    
            con = pooled.getConnection();       //第一次取得数据库连接 
            System.out.println("con Class Type is:"+con.getClass().getName()); 
            Object o1=getInnter(con);           //取得内部的实际数据库连接 
            System.out.println("Inner con Class Type is:"+o1.getClass(). 
            getName()); 
             
            stmt = con.createStatement(); 
            rs = stmt.executeQuery("SELECT * FROM user"); 
            while (rs.next()) 
                System.out.println("Data from DB:"+rs.getString(1)); 
            rs.close(); 
            stmt.close(); 
            con.close(); 
    
            Thread.sleep(1000);                 //等待连接返回池中 
            con = pooled.getConnection();       //第二次取得数据库连接 
            Object o2=getInnter(con); 
            if(o1==o2)                          //相同,则说明数据库连接被复用 
                System.out.println("o1 and o2 is same object."); 
            stmt = con.createStatement(); 
            rs = stmt.executeQuery("SELECT * FROM user"); 
            while (rs.next()) 
                System.out.println("Data from DB:"+rs.getString(1)); 
            rs.close(); 
            stmt.close(); 
            con.close(); 
    
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    public static Object getInnter(Object con){ 
        Object re=null; 
        Field f; 
        try { 
            f = con.getClass().getDeclaredField("inner"); 
            f.setAccessible(true); 
            re= f.get(con);                 //取得内部包装的Connection 
            f.setAccessible(false); 
        } catch (Exception e) { 
        } 
        return re; 
    } 

}

猜你喜欢

转载自wawa129.iteye.com/blog/1740635