Java 请尝试使用带有多个资源和else语句的资源JDBC

Java 请尝试使用带有多个资源和else语句的资源JDBC,java,try-catch,try-with-resources,Java,Try Catch,Try With Resources,这是一种将新行星添加到可观察客户列表的方法 我想知道我是否正确地使用了try with resources,以及自动关闭是否正常工作 public static Customer addPlanet(Customer customer) { String query1 = "Select * from planet where planet=? AND universeID=?"; String query2 = "INSERT INTO plane

这是一种将新行星添加到可观察客户列表的方法

我想知道我是否正确地使用了try with resources,以及自动关闭是否正常工作

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

关门了。如果
try
中的任何内容是
AutoCloseable

try
都可以,但是您应该删除
catch
块,这样您就不会像现在这样忽略异常。很抱歉,我是个新手。这是因为“打印异常的堆栈跟踪对于调试非常有用,但结果程序执行相当于抑制异常。”?因为您在外部
try
语句中捕获异常并继续,就好像没有出错一样,即正常返回
customer
对象,那么是的,您忽略了异常,因为调用方无法知道
addPlanet()
调用失败。删除2个
catch
子句,并将
throws-SQLException
添加到方法中,以便调用方可以看到异常。在调用堆栈的某个位置,可能会有一个方法打印stacktrace。@netcross不客气。请随意投票并接受答案。祝你今天愉快!:)