2013-10-06 50 views
0

我正在使用PostgreSQL的JDBC驅動程序,我想調用存儲過程。在Java中調用存儲過程

假設我有如下調用存儲過程的方法:

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連接始終執行語句後?還是應該讓它開放?根據我的理解,關閉它會將連接返回到連接池,以便其他人可以使用它。那是對的嗎?

回答

1
  1. 將該語句放在構造函數中不會導致性能提高。您只需在對象生命週期的不同點創建Connection。

  2. 您是對的,關閉Connection將立即將其返回到連接池,而不是等待自動發生。這是最好的做法。

+0

我一直在試圖做一段時間,我從來沒有能夠從Java到我的SQL Server數據庫的連接。我有一個存儲過程,我想從表中加載五個字段到一個JTable –