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

用资源尝试JDBC有多个资源和一个其他语句

赵珂
2023-03-14

这是一种向可观察的客户列表中添加新行星的方法。

我想知道我是否正确使用资源尝试,以及自动关闭是否工作。

public static Customer addPlanet(Customer customer) {
    String query1 = "Select * from planet where planet=? AND universeID=?";
    String query2 = "INSERT INTO planet (planet,universeID) VALUES(?,?)";

    try (PreparedStatement statement = (PreparedStatement) Database.connection.prepareStatement(query1);
            PreparedStatement statement2 = (PreparedStatement) Database.connection.prepareStatement(query2)) {
        
        statement.setString(1, customer.getPlanet());
        statement.setString(2, Integer.toString(customer.getUniverseID()));

        try (ResultSet rs = statement.executeQuery()) {
            if (rs.next()) {
                int planetId = rs.getInt(1);
                customer.setPlanetID(planetId);

                return customer;
            } else {
                statement2.setString(1, customer.getPlanet());
                statement2.setInt(2, customer.getUniverseID());
                statement2.executeUpdate();

                return addPlanet(customer);

            }

        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return customer;
}

我的问题是,这部分需要被封闭在一个try-catch块中,还是自动关闭。

statement2.executeUpdate();

共有1个答案

司徒隐水
2023-03-14

关门了。如果try中的任何内容是可自动关闭的,那么它们最后都会关闭。

 类似资料:
  • 我知道,如果资源已实现自动关闭,您通过尝试传递的资源将自动关闭。到现在为止,一直都还不错。但是,当我有几个我想要自动关闭的资源时,我该怎么办呢。带插座的示例; 所以我知道套接字将被正确关闭,因为它在try中作为参数传递,但是输入和输出应该如何正确关闭呢?

  • TensorFlow 白皮书 在这份白皮书里,你可以找到关于 TensorFlow 编程模型的更多详情和 TensorFlow 的实现原理。 TensorFlow: Large-scale machine learning on heterogeneous systems 引用 如果你在你的研究中使用了 TensorFlow,并且希望在引用中注记 TensorFlow,我们建议你引用上面这篇论文。

  • Cheatsheets PHP Cheatsheets - for variable comparisons, arithmetics and variable testing in various PHP versions PHP Security Cheatsheet 更多最佳实践 PHP Best Practices Best practices for Modern PHP Develop

  • 问题内容: 我是的新手,我想知道对于资源来说,我是否必须为每个添加一个,否则它将与上面的代码一起使用 问题答案: 通过在 块中声明所有资源,可以尝试将资源与多个资源一起使用,并且此功能是 Java 7中 引入的,而不是 Java 8中 引入的。如果有多个资源,则可以如下所示 在此示例中,该语句包含两个用分号分隔的声明: ZipFile 和 BufferedWriter 。当它紧随其后的代码块终止时

  • 我是新手,我想知道,对于资源,我是否必须为每个

  • 我目前正在进行一个项目,该项目使用HP的Fortify SCA工具来捕捉代码库中的安全问题。我在确定正确处理JDBC资源的最佳方法时遇到了一些问题。 我现在拥有的代码如下所示; 问题是Fortify会标记这段代码,说明如果嵌套的try语句中发生异常,那么对conn和ps的引用将丢失,它们将无法正确关闭。fortify标记这一点是正确的还是误报?据我所知,try with资源应该总是关闭它们的资源,