自己编写的连接池,可以用PreparedStatement,CallableStatement的。但是要用weblogic等提供的数据库连接池据说不行,但没有具体实践过。而我们现在使用的是自己编写的连接池,能使用这两个东西。

解决方案 »

  1.   

    那请问PreparedStatement 要不要于con一一对应?
      

  2.   

    连接池是用来负责管理数据库的连接的,和PrepareStatement或CallableStatement没有直接的关系。不过你是用自己编写的连接池还是Weblogic或是Oracle自带的连接池。因为PrepareStatement或CallableStatement是和connection打交道而不管connection是怎样获得的。另外通过一个connection可以建多个PrepareStatement或CallableStatement,但不是无限多,每种数据库可能都不一样,我遇到使用过oracle jdbc type4驱动获得的一个连接好像只能产生300个,否则就报最大游标数超出。在jdbc2中,一个Statement只能返回一个Resultset倒是对的。但jdbc3.0也可以获得多个Resultset了。
      

  3.   

    我用的是自己编写的连接池。
    如果有con1 与 con2 两个连接
    con1创建了PrepareStatement,con2没有创建
    那con2能不能使用con1创建的PrepareStatement呢
      

  4.   

    那用连接池能不能用PreparedStatement 以及CallableStatement呢?
      

  5.   

    连接池的原理就是让其它客户重用你用过的连接。
    但在一些jdbc实现里, 是用临时表或临时存储过程来做prepare的。
    如果那样的话,那么当你的物理连接被别人重用的时候,别人就有可能因为你留下的垃圾而失败。
    一般当不用连接池的时候,你只需要调用Connection.close(), dbms会负责清除所有临时资源。
    但当你的应用连接池缓存了物理Connection的时候,dbms就无能为力了。
    所以,首先,除了调用Connection.close(), 你必须调用Statement.close()去释放每一个你创建的Statement. 总而言之,对所有你创建的数据库对象调用close().其次,祈祷底层的jdbc和dbms真的删除了那些临时对象。
      

  6.   

    PreparedStatement  是欲编译的,可以使用杂,在连接池里面
      

  7.   

    那PreparedStatement 预编译后是存在数据库端了,当不通的connection 使用它时,数据库自动匹配了?