【发布时间】:2013-10-12 19:10:32
【问题描述】:
我正在使用 PostgreSQL 的 JDBC 驱动程序,我想调用存储过程。
假设我有一个调用存储过程的方法,如下所示:
public void callProcedure(int someValue) {
Connection con = null;
try {
con = connectionPool.getConnection();
CallableStatement st = con.prepareCall("{ call some_procedure(?) }");
st.setInt(1, someValue);
st.execute();
st.close();
}
catch (SQLException e) {
System.out.println(e.getMessage());
}
finally {
if (con != null) {
try { con.close(); } // assure connection "goes" back to the pool
catch (SQLException e) { }
}
}
}
现在让我们假设这个方法callProcedure 可能会被调用数百万次。我的问题是:
(1.) 如果我在类的构造函数中创建连接并在构造函数中创建prepare_the_Call 会更好(性能方面),所以像这样:
CallableStatement st;
public Constructor() {
Connection con = connectionPool.getConnection();
st = con.prepareCall("{call some_procedure(?)}");
}
然后在方法里面做:
public void callProcedure(int someValue) {
try {
st.setInt(1, someValue);
st.execute();
st.close();
}
catch (SQLException e) {
System.out.println(e.getMessage());
}
finally {
if (con != null) {
try { con.close(); } // assure connection "goes" back to the pool
catch (SQLException e) { }
}
}
}
(2.) 总是在执行语句后连接close 有意义吗?还是我应该让它保持打开状态?据我了解,关闭它会将连接返回到连接池,以便其他人可以使用它。对吗?
【问题讨论】:
标签: java postgresql stored-procedures jdbc connection-pooling