thinkjdbc 关闭_Java / JDBC:当发生异常时关闭数据库连接的最佳设计模式

bd96500e110b49cbb3cd949968f18be7.png

I'm new to Java (I'm using Java 6). I've been using the below design pattern for all my Java POJOs and servlets to access an Oracle 11G database via GlassFish 3.1.2 web server.

I'm getting an intermittent database error (ORA-12519) when all available processes (or sessions, not sure what the difference is) are consumed, leading me to think somehow the processes are not being released by the application.

Looking at the design pattern below, is there a better way to make sure that the JDBC connection to the database is released in the event of an exception? For example, should I also place the if ( conn != null) conn.close(); code INSIDE the catch block? Or, is there a better design pattern? Thanks in advance for any comments/hints.

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();

At this line conn cannot be null. The most popular pattern, up until Java 6 is:

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 */ }

}

}

With Java 7 this will become less cumbersome with its try-with-resource construct. The above code can change to the much shorter

try (Connection conn = createConnection()) {

// use connection

} catch {

// handle exception

}

// close is not required to be called explicitly

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值