Исключение SQL: операция не разрешена после закрытия ResultSet.Это почему? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь получить один фрагмент данных из базы данных, и внезапно выдает ошибку: операция не разрешена после закрытия ResultSet. на линии, которая

while(rs3.next()) {

Почему это происходит? Код вроде в порядке и всё. Вот мой код:

public DatabaseConnectionClass() {

    idfield = new JTextField("");
    submit = new JButton("go");
    settings = new JButton("settings");
    auto = new JButton("auto");
    add(idfield);
    add(submit);
    add(settings);
    add(auto);
    setLayout(new GridLayout());

    try {

        Class.forName("com.mysql.cj.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database1?useTimezone=true&serverTimezone=UTC", "root", "");
        st = con.createStatement();
        con2 = DriverManager.getConnection("jdbc:mysql://localhost:3306/values?useTimezone=true&serverTimezone=UTC", "root", "");
        st2 = con2.createStatement();


    } catch(Exception ex) {
        System.out.println(ex);



    }
    }

А вот неисправный метод, который активируется при нажатии на одну из кнопок (называемую авто):

 public void getAuto() throws Exception {

            for (int i = 0; i < 1000; i++) {

            String q1 = "SELECT * FROM payments LIMIT 1";
            try {
                rs3=st.executeQuery(q1);
                while(rs3.next()) {
                String ppmail = rs3.getString("mail");
                getData(ppmail);
                rs3.close();

                }} catch (SQLException e) {

                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println(e);
                auto.setText("End of records");
            }


            }


}

1 Ответ

1 голос
/ 11 июля 2019

Вы не можете использовать ResultSet после того, как закроете это, переместите rs3.close(); в finally блок

            }} catch (SQLException e) {

            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e);
            auto.setText("End of records");
        } finally { 
             if (s3 != null){
                 s3.close();
             }
        }

Освобождает базу данных этого объекта ResultSet и JDBCресурсы сразу

...