当前位置: 首页 > 面试题库 >

Java 7自动资源管理JDBC(try-with-resources语句)

红明德
2023-03-14
问题内容

如何使用Java 7的自动资源管理(try-with-
resources语句)集成创建/接收连接,查询数据库以及可能处理结果的通用JDBC习惯?(教程)

在Java 7之前,通常的模式是这样的:

Connection con = null;
PreparedStatement prep = null;

try{
    con = getConnection();
    prep = prep.prepareStatement("Update ...");
    ...
    con.commit();
}
catch (SQLException e){
    con.rollback(); 
    throw e;
}
finally{
    if (prep != null)
        prep.close();
    if (con != null)
        con.close();
}

使用Java 7,您可以:

try(Connection con = getConnection(); PreparedStatement prep = con.prepareConnection("Update ..."){

   ...
   con.commit();
}

这将关闭ConnectionPreparedStatement,但是回滚又如何呢?我无法添加包含回滚的catch子句,因为该连接仅在try块内可用。

您是否还在try块之外定义连接?这里的最佳实践是什么,特别是如果使用连接池?


问题答案:
try(Connection con = getConnection()) {
   try (PreparedStatement prep = con.prepareConnection("Update ...")) {
       //prep.doSomething();
       //...
       //etc
       con.commit();
   } catch (SQLException e) {
       //any other actions necessary on failure
       con.rollback();
       //consider a re-throw, throwing a wrapping exception, etc
   }
}

根据oracle文档,您可以将try-
with-resources块与常规try块结合使用。IMO,以上示例捕获了正确的逻辑,即:

  • 如果没有问题,请尝试关闭PreparedStatement
  • 如果内部块出了问题,(无论是什么)回滚当前事务
  • 无论如何尝试关闭连接
  • 如果关闭连接时出现问题,则无法回滚事务(因为这是连接上的一种方法,现在处于不确定状态),因此请勿尝试

在Java 6及更早版本中,我将使用三重嵌套的try块集(外部try-finally,中间try-catch,内部try-
finally)来完成此操作。ARM语法确实使这个麻烦。



 类似资料:
  • 本文向大家介绍Java使用 try-with-resources 实现自动关闭资源的方法,包括了Java使用 try-with-resources 实现自动关闭资源的方法的使用技巧和注意事项,需要的朋友参考一下 1、 在Java1.7之前,我们需要通过下面这种方法, 在finally中释放资源,这种方法有点繁琐。 2、在java1.7之后,可以使用try-with-resources实现自动关闭资

  • 当只使用一个资源时,Java7 try-with-resources语法(也称为ARM块(自动资源管理))是很好的、简短的和直接的。但是,当我需要声明多个相互依赖的资源时,我不确定什么是正确的习惯用法,例如和包装它的。当然,这个问题涉及包装某些资源的任何情况,而不仅仅是这两个特定的类。 我想出了以下三种选择: 这个很好,很短,但是坏了。因为底层的不是在变量中声明的,所以它永远不会在生成的块中直接关

  • 在此Java程序示例中: 当在静态方法example()的正文中抛出OutOfMemoryError错误时,在终止静态方法example()之前,连接“con”和语句“stmt”是否会自动关闭,尽管没有任何“cat”捕获这些错误,因此在main()的其余代码中,是否确定这两个对象已关闭? 谢谢

  • 问题内容: 使用try-with-resources语句关闭资源时,是否可以忽略抛出的异常? 例: 还是应该继续关闭? 问题答案: 我在钱币开发邮件列表中找到了这个答案:http : //mail.openjdk.java.net/pipermail/coin- dev/2009-April/001503.html 5. close方法的某些失败可以安全地忽略(例如,关闭已打开以供读取的文件)。

  • try-with-resources语句是一个try语句,其中包含一个或多个正式声明的资源。 这里资源是一个对象,一旦不再需要就应该关闭它。 try-with-resources语句确保在需求完成后关闭每个资源。 任何实现java.lang.AutoCloseable或java.io.Closeable的对象,接口都可以用作资源。 在Java 9之前,资源将在try之前或try语句内部声明,如下面

  • 主要内容:Java SE 7:Try-With-Resources基础知识,Java SE 7:Try-With-Resources规则,Java SE 9:Try-With-Resources改进在这篇文章中,我们将讨论Java SE 9中的一些改进语句。现在让我们开始学习这个构造。 Java SE 7:Try-With-Resources基础知识 Java SE 7引入了一个新的构造: 语句,用于更好的异常处理。 如果没有这个构造,开发人员必须编写大量冗余和难看的代码。 如果开发人员忘记正确