Я читал следующее официальное руководство и обнаружил проблему: совместное использование этих двух фрагментов кода приведет к ошибке (нет области действия для объекта stmt):
Обработка объектов ResultSet
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(); }
}
Если я попытаюсь stmt.close()
в блоке finally, я получить ошибку, потому что в его области видимости нет переменной stmt, и это потому, что (насколько я понимаю) фактическая область действия объекта stmt находится в блоке try.
Мой вопрос прост, эти два блока кода работают вместе?
Ответ, который я нашел, - нет, только перемещение экземпляра объекта stmt за пределы блока try приведет к созданию рабочего фрагмента.
Может кто-нибудь подсказать мне свою мысль?
Я просто хочу понять, есть ли некоторые аспекты аргумента, которые мне до сих пор не ясны.
Большое спасибо всем, кто попытается мне помочь.