最近发现网上的Oracle的官方连接池资料基乎都不是很好,至少对初学者来说是这样,今天有空,写一下这方面的东西与大家讨论学习,主要是给未使用过Oracle官方连接池的人看,同时也欢迎高手一起参与讨论最好的连接池实现!
一般的,连接池有三种实现方式:
1、用Oracle的官方连接池
2、用第三个的连接池
3、自己写连接池
这里说的是Oracle官方连接池的实现;Oracle提供的包里,类与接口比较多,初学者又难以找到好有有效的资料,所以现实中,它反而是三种方式中,最难上手的。其实对于初用连接池的开发者,最重要的是找到一个简洁的明了的实现。下面给大家提供一个连接池实现的源文件,其中大部分语句都是用于输出连接池状态,只有少量几句语句是核心,相信大家一看就明!package testocalpool;import oracle.jdbc.pool.*;
import java.sql.*;public class TestOcalPool {
private OracleConnectionPoolDataSource ocpds = null; public TestOcalPool() {
try {
ocpds = new OracleConnectionPoolDataSource();
ocpds.setURL("jdbc:oracle:thin:@127.0.0.1:1521:TEST");
ocpds.setUser("TEST_USER");
ocpds.setPassword("manager");
OracleConnectionCacheImpl myOCCI = new OracleConnectionCacheImpl(
ocpds);
System.out.println("空连接池");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn = myOCCI.getConnection();
System.out.println("获取一个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn2 = myOCCI.getConnection();
System.out.println("获取第二个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn3 = myOCCI.getConnection();
System.out.println("获取第三个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize()); Statement st = conn.createStatement();
Statement st2 = conn2.createStatement();
ResultSet rs = st.executeQuery("select * from test");
ResultSet rs2 = st2.executeQuery("select sysdate from dual");
System.out.println("第一/二连接使用中");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
System.out.println("URL=" + ocpds.getURL());
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
while (rs2.next()) {
System.out.println(rs2.getString(1));
}
conn.close();
System.out.println("关闭(释放)第一个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
conn2.close();
System.out.println("关闭(释放)第二个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn4 = myOCCI.getConnection();
System.out.println("获取第四个连接");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
conn3.close();
System.out.println("关闭(释放)第三个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
conn4.close();
System.out.println("关闭(释放)第四个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
}
catch (SQLException ex) {
System.out.println("TestOcalPool() is error:"+ex.getMessage());
ex.printStackTrace();
}
} public static void main(String a[]) {
new TestOcalPool();
}
}
一般的,连接池有三种实现方式:
1、用Oracle的官方连接池
2、用第三个的连接池
3、自己写连接池
这里说的是Oracle官方连接池的实现;Oracle提供的包里,类与接口比较多,初学者又难以找到好有有效的资料,所以现实中,它反而是三种方式中,最难上手的。其实对于初用连接池的开发者,最重要的是找到一个简洁的明了的实现。下面给大家提供一个连接池实现的源文件,其中大部分语句都是用于输出连接池状态,只有少量几句语句是核心,相信大家一看就明!package testocalpool;import oracle.jdbc.pool.*;
import java.sql.*;public class TestOcalPool {
private OracleConnectionPoolDataSource ocpds = null; public TestOcalPool() {
try {
ocpds = new OracleConnectionPoolDataSource();
ocpds.setURL("jdbc:oracle:thin:@127.0.0.1:1521:TEST");
ocpds.setUser("TEST_USER");
ocpds.setPassword("manager");
OracleConnectionCacheImpl myOCCI = new OracleConnectionCacheImpl(
ocpds);
System.out.println("空连接池");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn = myOCCI.getConnection();
System.out.println("获取一个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn2 = myOCCI.getConnection();
System.out.println("获取第二个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn3 = myOCCI.getConnection();
System.out.println("获取第三个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize()); Statement st = conn.createStatement();
Statement st2 = conn2.createStatement();
ResultSet rs = st.executeQuery("select * from test");
ResultSet rs2 = st2.executeQuery("select sysdate from dual");
System.out.println("第一/二连接使用中");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
System.out.println("URL=" + ocpds.getURL());
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
while (rs2.next()) {
System.out.println(rs2.getString(1));
}
conn.close();
System.out.println("关闭(释放)第一个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
conn2.close();
System.out.println("关闭(释放)第二个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
Connection conn4 = myOCCI.getConnection();
System.out.println("获取第四个连接");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
conn3.close();
System.out.println("关闭(释放)第三个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
conn4.close();
System.out.println("关闭(释放)第四个连接后");
System.out.println("连接池中总连接数-------->" + myOCCI.getCacheSize());
System.out.println("连接池中活动连接数-------->" + myOCCI.getActiveSize());
}
catch (SQLException ex) {
System.out.println("TestOcalPool() is error:"+ex.getMessage());
ex.printStackTrace();
}
} public static void main(String a[]) {
new TestOcalPool();
}
}
解决方案 »
- 物化视图索引查询
- 向大家请教oracle olap 结果如何通过web展示
- ORA-06550,PLS-00103错误,求助!
- 两表关联的问题
- 请问我机器(windows XP)上的oracle10g的http://localhost:5500/em的一个奇怪问题?
- 试试,看看有没有人知道怎么解决,关于oracle 字符集问题
- 如何查看当前的用户模式?-------------
- Oracle 10g sqlplus下如何查看table的primary key呢?
- Oracle9i 和SQLserver2000 同时安装在同一个win2003服务器上会不会出现兼容性问题?
- 鸡毛信(分不够再加):IMP-00003: ORACLE 错误1658出现 ORA-01658: 无法为表空间TS01_TABLE中的段创建 INITIAL 区
- 存储过程报错了瞧一下
- 估计是字符集问题:AL32UTF8,UTF8,ZHS16CGB231280
欢迎有意者加入!(我这叫抛砖引玉,也叫招牛买马!嘿嘿)