Junior
Чӣ тавр бояд пайвастшавиро бо базаи маълумот дуруст баст?
sobes.tech AI
Ҷавоб аз AI
Истифодаи блоки try-with-resources.
// Эълон кардани захираҳо, ки ба таври автоматӣ баста мешаванд
try (
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", ""); // Дастрасӣ ба объект Connection
Statement statement = connection.createStatement(); // Эҷоди объект Statement
ResultSet resultSet = statement.executeQuery("SELECT 1") // Иҷрои суол ва гирифтани ResultSet
) {
// Кор бо маълумот аз ResultSet ё иҷрои дигар амалиётҳо бо базаи додаҳо
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
// Коркарди эҳтимолии истиснои SQLException
e.printStackTrace();
}
Фоидаҳои ин усул:
- Автоматӣ баста мешавад: Захираҳо (Connection, Statement, ResultSet) пас аз баромадан аз блоки
tryба таври кафолатнок баста мешаванд, ҳатто агар истисно рух диҳад. - Коди тоза: Намехоҳад даъвати ошкоро
close()дар блокиfinally, ки миқдори boilerplate-ро кам мекунад. - Коркарди истисно: Агар дар вақти баста шудани захира истисно рух диҳад, он аз истиснои дар дохили
tryрухдода пинҳон намешавад.
Роҳи алтернативӣ, ки камтар тавсия дода мешавад, бо баста кардани ошкоро дар finally:
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", "");
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT 1");
// Кор бо маълумот
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Баста кардани ошкоро захираҳо дар тартиби муқобил ба онҳое, ки гирифта шудаанд
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Ин усул гулӯтар ва эҳтимолан хатогӣ бештар дорад, махсусан дар вақти коркарди истисноҳо ҳангоми баста шудани захираҳо. Пешниҳод мешавад, ки истифодаи try-with-resources ба кор бурда шавад.