【问题标题】:Calling Stored Procedures in Java在 Java 中调用存储过程
【发布时间】: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


    【解决方案1】:
    1. 将该语句放在构造函数中不会提高性能。您只是在对象生命周期的不同点创建连接。

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

    【讨论】:

    • 我一直在尝试这样做一段时间,但我永远无法获得从 Java 到我的 SQL Server 数据库的连接。我有一个存储过程,我想将表中的五个字段加载到 JTable 中
    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2021-02-11
    • 2013-05-18
    相关资源
    最近更新 更多