Java / JDBC:发生异常时关闭数据库连接的最佳设计模式
我是Java的新手(我正在使用Java 6)。我一直在对所有Java POJO和servlet使用以下设计模式,以通过GlassFish 3.1.2
Web服务器访问Oracle 11G数据库。
耗尽所有可用进程(或会话,不确定是什么区别)后,我遇到间歇性数据库错误(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;
}
回答:
if ( conn != null ) // close connection conn.close();
在此行conn
不能 为null。直到Java 6为止,最受欢迎的模式是:
Connection conn = null;try {
// initialize connection
// use connection
} catch {
// handle exception
} finally {
if (conn != null) {
try { conn.close(); } catch (Exception e) { /* handle close exception, quite usually ignore */ }
}
}
使用 ,它的try-with-
resource结构将变得不那么麻烦。上面的代码可以更改为更短
try (Connection conn = createConnection()) { // use connection
} catch {
// handle exception
}
// close is not required to be called explicitly
以上是 Java / JDBC:发生异常时关闭数据库连接的最佳设计模式 的全部内容, 来源链接: utcz.com/qa/413517.html