gpt4 book ai didi

Java - try-catch 内的变量范围 - 大多数答案与官方 Java 教程之间的对比

转载 作者:行者123 更新时间:2023-12-01 18:50:10 25 4
gpt4 key购买 nike

我正在阅读以下内容official guide我发现了一个问题,同时使用这两个代码片段会导致错误(stmt 对象没有作用域):

处理结果集对象

try {
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + "\t" + supplierID +
"\t" + price + "\t" + sales +
"\t" + total);
}
}

关闭连接

} finally {
if (stmt != null) { stmt.close(); }
}

如果我尝试在finally block 中使用stmt.close(),我会收到一个错误,因为他的作用域中没有stmt变量,这是因为(据我所知) ) stmt 对象的实际作用域在 try block 中。

我的问题很简单,这两段代码可以一起工作吗?

我发现的答案是否定的,只有将 stmt 对象的实例化移到 try block 之外才会产生工作片段。

有人可以告诉我他的想法吗?
我只是想了解该论点是否有某些方面我还不清楚。

非常感谢任何愿意帮助我的人。

最佳答案

据推测,您已在 try 内部而不是外部声明了 stmt 对象。代码应如下所示:

Statement stmt;
try {
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + "\t" + supplierID +
"\t" + price + "\t" + sales +
"\t" + total);
}
} finally {
if (stmt != null) { stmt.close(); }
}

但是,您可以利用 Statement 实现 AutoClosable 的事实,并通过使用 try with resources(Java 功能在 Java 6 iirc 中添加)。看起来像:

try (Statement stmt = con.createStatement()) {
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + "\t" + supplierID +
"\t" + price + "\t" + sales +
"\t" + total);
}
} catch (SQLException e) {
// Log it
}

您可以在此处阅读有关 AutoClosable尝试使用资源的更多信息:

https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

关于Java - try-catch 内的变量范围 - 大多数答案与官方 Java 教程之间的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59751065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com