ggk*_*ath 8 java database oracle 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;
}
Run Code Online (Sandbox Code Playgroud)
Mis*_*ble 30
if ( conn != null ) // close connection
conn.close();
Run Code Online (Sandbox Code Playgroud)
在这一行conn 不能为空.最受欢迎的模式,直到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 */ }
}
}
Run Code Online (Sandbox Code Playgroud)
使用Java 7,使用try-with-resource构造将变得不那么麻烦.上面的代码可以变得更短
try (Connection conn = createConnection()) {
// use connection
} catch {
// handle exception
}
// close is not required to be called explicitly
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26442 次 |
| 最近记录: |