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ბლოკში, რაც ამცირებს ბოილერპლეიტ კოდის რაოდენობას. - გამონაკლისების დამუშავება: თუ რესურსის დახურვის დროს მოხდება გამონაკლისი, ის არ იქნება ჩაკლული
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-ის გამოყენება.