应用程序服务器中可调用和准备语句的行为

时间:2010-11-23 04:30:31

标签: oracle jdbc database-connection


CallableStatement和PreparedStatements是预编译的。它们是否就连接完成了?我的意思是,假设有100个连接对象驻留在应用服务器的连接池中。有一个类使用Callable和PreparedStatements。让我们说用的方法是:

public  void invokePreparedAndCallableStatements(){  
  //Fetches connection from pool  
  Connection con = getConnectionFromPool();
  CallableStatement cs = con.prepareCall(.....);
  cs.register...(...);
  cs.execute();
  ...
  ...
  PreparedStatement st = con.prepareStatement(...);
  st.setXXX(..);
  st.executeUpdate();
  ...
 }

现在,当第一次调用该方法时,将从池中获取连接并处理该请求。编制可调用和准备语句。当该方法被调用另外99次时,每次从池中获取不同的连接,那么 - 是否会为每个连接编写语句?
在这种情况下使用语句的最佳方式是什么?我不能使它们(con.prepareCall()或con.prepareStatement())静态,因为连接不是静态的。

2 个答案:

答案 0 :(得分:1)

代码实际上是编译并存储在数据库的共享池中。使用相同代码的任意数量的连接都将受益于缓存。只要内存限制允许,编译的代码就会保留。

答案 1 :(得分:0)

语句将被预编译。池化将基于您指定的参数。

注意:如果您使用的是JDBC 3.0,则还可以汇集PreparedStatements。参考:What's new in JDBC 3.0