最近发现网上的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();
    }
}