Java,MySQL - Исключение в потоке "main" java.sql.SQLException: операция не разрешена после закрытия ResultSet

Я пытаюсь получить первый элемент ResultSet, Почему я получаю эту ошибку

public ResultSet executeSearch(String q){
        openConnection();
        ResultSet resultSet = null;
        try{
            Statement statement = connection.createStatement();
            resultSet = statement.executeQuery(q);
            closeConnection();
            return resultSet;
        }
        catch (Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
        finally {
            closeConnection();
        }
        return resultSet;
    }

 public int getAddressID(String city) throws SQLException{
    String q = "SELECT PK_ADDRESS_ID FROM tbl_addresses WHERE city =" + "\'"+ city + "\';";
    System.out.println(q);
    ResultSet rs = executeSearch(q);
    int i = 0;
    if (rs.next()){
        i = rs.getInt(1);
    };
    return i;
}

1 ответ

Решение

Вы получаете эту ошибку, потому что вы пытаетесь прочитать ваш ResultSet после закрытия, что запрещено.

Вам необходимо закрыть соединение (и ваш ResultSet) в вашем методе getAddressID вместо этого, как следующее:

public ResultSet executeSearch(String q){
    openConnection();
    try {
        return connection.createStatement().executeQuery(q);
    } catch (Exception e){
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
    return null;
}

public int getAddressID(String city) throws SQLException{
    ...
    try (ResultSet rs = executeSearch(q)) {
        ...
    } finally {
         closeConnection();
    }
    return i;
}
Другие вопросы по тегам