java中 描述try-with-resources的使用?_Java在try-with-resources中准备好的语句不能正常工作...

try-with-resource语句用于声明(Autoclosable)资源. Connection,PreparedStatement和ResultSet是Autoclosable,所以没关系.

但是stmt.setInt(1,user)不是资源,而是一个简单的语句.在try-with-resource语句中不能有简单的语句(不是资源声明)!

解决方案:创建多个try-with-resource语句!

try (Connection conn = DriverManager.getConnection(DBURL,DBPASS)) {

executeStatement(conn);

} catch (sqlException e) {

// log error but dont do anything,maybe later

String error = "sqlException: " + e.getMessage() + "\nsqlState: " + e.getsqlState() + "\nVendorError: " + e.getErrorCode();

return false;

}

private void executeStatement(Connection con) throws sqlException {

try (PreparedStatement stmt = conn.prepareStatement("SELECT id FROM users WHERE id=? LIMIT 1")) {

stmt.setInt(1,user);

try (ResultSet rs = stmt.executeQuery()) {

// process result

}

}

}

(请注意,从技术上讲,不需要像我一样将sql语句的执行放入单独的方法中.如果打开连接和创建PreparedStatement都在同一个try-with-resource语句中,它也可以工作.我只考虑将连接管理内容与其余代码分开的良好做法.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值