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;
}
}
c3p0连接池脱离Hibernate使用
猜你喜欢
转载自wawa129.iteye.com/blog/1740635
今日推荐
周排行