最近发现网上的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表空间无法扩展
- 按惯例,散分200!
- 跪求把sqlserver脚本转换成oracle脚本
- oracleorahome90managementserver服务 没有可以用吗?
- 那里有PL/Sql的联机帮助或者使用手册等?
- 有关“最大值”的一个问题
- 急救!关于OLEDB连ORCLE读IMAGE数据格式问题!
- PRO*C高分求救!爲什麽將輸出格式為C++時,總會出現LINK的錯誤!
- 在客户端要同时访问Oracle 8 和Oracle8i 只装Oracle 8i 客户端可不可以,或者用ODAC可不可以?
- ORACEL中数据一对多的关系
- 存储过程报错了瞧一下
- 估计是字符集问题:AL32UTF8,UTF8,ZHS16CGB231280
欢迎有意者加入!(我这叫抛砖引玉,也叫招牛买马!嘿嘿)