Sobes.tech
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-ის გამოყენება.