我是Java新手(我正在使用Java 6)。我一直在使用以下設計模式來處理所有Java POJO和servlet,以通過GlassFish 3.1.2 Web服務器訪問Oracle 11G數據庫。Java/JDBC:發生異常時關閉數據庫連接的最佳設計模式
當所有可用的進程(或會話,不知道有什麼區別)被使用時,我得到一個間歇性的數據庫錯誤(ORA-12519),導致我以某種方式認爲應用程序沒有釋放進程。
看看下面的設計模式,有沒有更好的方法來確保在發生異常時發佈到數據庫的JDBC連接?例如,我是否也應該將if (conn != null) conn.close();
代碼放在catch塊中?或者,有沒有更好的設計模式?提前感謝您的任何意見/提示。
public String MyFunction() throws Exception {
Connection conn;
CallableStatement cs;
try {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/MyPool");
conn = ds.getConnection();
cs = conn.prepareCall("{call my_sproc (?)}");
cs.registerOutParameter(1, Types.VARCHAR);
cs.execute();
String outParam = cs.getString(1);
if (conn != null) // close connection
conn.close();
} catch (Exception e) {
outParam = "an error occurred";
}
return outparam;
}
注意,也可能是很好的做法,關閉結果集和語句。這裏有一個有用的鏈接(請參閱Stefan Schweizer在良好設計模式鏈接中的回覆):http://stackoverflow.com/questions/103938/resultset-not-closed-when-connection-closed – ggkmath