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())静态,因为连接不是静态的。
答案 0 :(得分:1)
代码实际上是编译并存储在数据库的共享池中。使用相同代码的任意数量的连接都将受益于缓存。只要内存限制允许,编译的代码就会保留。
答案 1 :(得分:0)
语句将被预编译。池化将基于您指定的参数。
注意:如果您使用的是JDBC 3.0,则还可以汇集PreparedStatements。参考:What's new in JDBC 3.0