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) {
// Հնարավոր արտահայտությունների մշակումը
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։