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 блокунда көрсөтүүнү талап кылбайт, бул 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 колдонуу сунушталат.