gpt4 book ai didi

java - 在Java中调用存储过程

转载 作者:行者123 更新时间:2023-12-01 14:02:53 25 4
gpt4 key购买 nike

我正在使用 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.)如果我在类的构造函数中创建连接并在构造函数中创建连接,会更好(性能方面),所以像这样:

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.) 在执行语句后始终关闭连接是否有意义?或者我应该将其保持打开状态?根据我的理解,关闭它会将连接返回到连接池,以便其他人可以使用它。这是正确的吗?

最佳答案

  1. 将该语句放入构造函数中不会导致性能提高。您只需在对象生命周期的不同点创建连接即可。

  2. 你是对的,关闭连接会立即将其返回到连接池,而不是等待自动发生。最佳做法是这样做。

关于java - 在Java中调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com