当前位置: 首页 > 知识库问答 >
问题:

在Java7之后将ResultSet放入嵌套的try-with-resources语句是一个好的做法吗?

孙嘉
2023-03-14

根据http://docs.oracle.com/javase/7/docs/api/java/sql/statement.html#close()的文档,

如果我们仍然需要关闭ResultSet,我们可能需要一个嵌套的try-with-resources语句,因为我们可能会为语句设置如下参数:

try (Connection conn = connectionProvider.getConnection();
     PreparedStatement pstmt = conn.prepareStatement(sql) {//resources of conn and pst

     setPrepareStatementParameter(pstmt, kvs);//need to set parameters, so I have to put ResultSet into another try-with-resources statement

     try (ResultSet res = pstmt.executeQuery()) {
                ..............

     }
}

是否将ResultSet放入一个单独的try-with-resources语句中,因为文档声明关闭语句将关闭ResultSet

共有1个答案

籍昱
2023-03-14

您的示例涵盖的连接、语句和结果集之间的交互范围太有限。考虑以下几点:

try (Connection conn = connectionProvider.getConnection();
     PreparedStatement pstmt = conn.prepareStatement(sql);) {

     for (int i = 0; i < kvs.length; i++) {
         setPrepareStatementParameter(pstmt, kvs[i]);

         // do other stuff

         // Place the ResultSet in another try with resources
         // to ensure the previous iteration's ResultSet
         // is closed when the next iteration begins
         try (ResultSet res = pstmt.executeQuery()) {
             ..............

         }
     }
 }

在上面的示例中,PreparedStatement被参数化,并在for-loop中执行kvs.length次数。想象一下这样一个情况,参数化过程,由于任何原因,花费了相当长的时间。请注意,关闭PreparedStatement对我们没有好处,因为我们希望在for循环的每次迭代中重用已编译的SQL语句。当然,将ResultSet嵌套到它自己的try-with-resources块中--从而确保先前迭代的ResultSet是关闭的,但PreparedStatement仍然是打开的--是值得努力的。

 类似资料:
  • 问题内容: 我想知道将 return 语句放在 try-with-resources 块中是否会阻止资源自动关闭。 如果我这样写, 连接 会关闭吗?在Oracle文档中指出: try-with-resources语句可确保在语句末尾关闭每个资源。 如果由于return语句而从未到达该语句的末尾,该怎么办? 问题答案: 根据Oracle的教程,“无论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引入了一个新的构造: 语句,用于更好的异常处理。 如果没有这个构造,开发人员必须编写大量冗余和难看的代码。 如果开发人员忘记正确

  • 本文向大家介绍如何在Java 9中的try-with-resources语句中声明多个资源?,包括了如何在Java 9中的try-with-resources语句中声明多个资源?的使用技巧和注意事项,需要的朋友参考一下 在Java 9中对try-with-resources语句进行了改进。如果我们已经有一个最终的或等同于最终变量的资源,那么我们可以在try-with-resources语句中使用该

  • 我有两个嵌套的IF语句。。 <代码>=如果($B3=$K$3,日期(年(D3)$L$3,月(D3)$M$3,天(D3)),如果($B3=$K$4,日期(年(D3)$L$4,月(D3)$M$4,天(D3)),如果($B3=$K$5,日期(年(D3)$L$5,月(D3)$M$5,天(D3)),如果($B3=$K$6,日期(年(D3)$L$6,月(D3)$M$6,天(D3)),“”) 和