连接池有很多厂商实现的,你用的是什么server?有没有配置连接池、datasource?

解决方案 »

  1.   

    能否实现连接池,确实和服务器的选择有关,
    用javax.sql中的那几个类,确实可以实现连接池
      

  2.   

    appserver:was or wls
    db:sqlserver or oracle我的意思是SERVER可以数据源和连接池,这一点没问题,数据库厂商提供的JDBC驱动也支持连接池唯一的问题是:配置好了以后程序中使用连接池的方法
    Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/EmployeeDB");
    Connection con = ds.getConnection("myPassword", "myUserName");这种方法应该只是从数据源获得连接,而并没有用上连接池ConnectionPoolDataSource cpds = (ConnectionPoolDataSource)ctx.lookup("jdbc/EmployeeDB");
    PooledConnection pConn = cpds.getPooledConnection(dbUser,dbPassword);
    conn = pConn.getConnection();
    这种方法才用上了连接池是不是这样?要注意:数据源和连接池不是同一个概念
      

  3.   

    >Context ctx = new InitialContext(); DataSource ds = (DataSource)>ctx.lookup("jdbc/EmployeeDB");
    >Connection con = ds.getConnection("myPassword", "myUserName");>这种方法应该只是从数据源获得连接,而并没有用上连接池这要看你的jdbc/EmployeeDB如何配的了,一般的applicaiton server配置datasource的时候都要配连接池相关属性的。所以上面的代码一般情况下也是使用了连接池的。
      

  4.   

    你的这个意思是:
    假如数据源的实现类是
    oracle.jdbc.pool.OracleConnectionPoolDataSource
    那Connection con = ds.getConnection("myPassword", "myUserName");
    这个方法自然就是从池中取得连接?
    根据JDBC2 OPTION,
    PooledConnection pConn = cpds.getPooledConnection("myPassword", "myUserName");
    这个方法才是从连接池取得连接的是的,和DBMS的连接池类的实现有关,如果是ORACLE,可能ds.getConnection("myPassword", "myUserName");如果是其他的DBMS呢?
      

  5.   

    既然和实现有关,
    你怎么知道某个JDBC驱动中ConnectionPoolDataSource类
    的 getConnection()就一定是从池中取的连接?即使是ORACLE,我现在都没有找到这样的文字
      

  6.   

    javax.sql.*
    这个包下面几乎都是接口,具体的实现和实现这个包的厂商有关。判断连接是否从池中取得:用完连接(调用close()方法),你可以用
    SELECT * FROM V$SESSION
    看看连接是否仍然存在。还有就是和你所用的应用服取器有关,它是如何实现的.