Java 请尝试使用带有多个资源和else语句的资源JDBC
这是一种将新行星添加到可观察客户列表的方法 我想知道我是否正确地使用了try with resources,以及自动关闭是否正常工作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
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不客气。请随意投票并接受答案。祝你今天愉快!:)