как устранить ошибку Исключение SQL: java.sql.SQLException: операция не разрешена после закрытия ResultSet

Я пытаюсь запустить следующий код, но получаю ошибку:

Возникло исключение SQL: java.sql.SQLException: операция не разрешена после закрытия ResultSet.

Как решить эту ошибку? Мне нужно два набора результатов для моего приложения.

public static void main(String[] args) {
        String connectionUrl = "jdbc:mysql://127.0.0.1:3306/test";
        String dbUser = "root";
        String dbPwd = "Syntel#92";
        Connection conn;
        ResultSet rs, res1 = null;
        Statement stmt = null;
        int rowcount = 0;
    //  String queryString = "create table job_status_table as select j1.job_id,s1.Source_ID,s1.Source_name from JOb_list j1,SOURCE_DETAILS s1 where s1.Source_ID = j1.Source_ID";
        String queryString = "create table job_status_table as select source_id,source_name from source_details";

        String addcolumn = "alter table job_status_table add column Source_rowcount int";
        String fetchdata = "Select Source_name from job_status_table";
        try {
            conn = DriverManager.getConnection(connectionUrl, dbUser, dbPwd);
            stmt = conn.createStatement();
            // get record count from table job_status_table1
            // stmt.executeQuery("select count() from job_status_table1");
            // create table
            stmt.executeUpdate(queryString);
            System.out.println("Table created in the database");
            stmt.executeUpdate(addcolumn);
            System.out.println("alter table");
            rs = stmt.executeQuery(fetchdata);
            System.out.println("fetch data");
            while (rs.next()) {
                String table_count = null;
                String table_name = null;




                    table_name = rs.getString("Source_name");
                    System.out.println(table_name);


            //  table_name = rs.getString("Source_name");
                //System.out.println(table_name);
                //rs.close();

                    table_count = "select count(*) from " + table_name;
                //table_count = "select count(*) from " + table_name;
                //rs.close();
            //  res1 = stmt.executeQuery(table_count);

                res1 = stmt.executeQuery(table_count);
                //System.out.print(res1);
                if (res1.next()) {

                    rowcount = res1.getInt(1);//res1.getInt(1);
                    System.out.println("Result set values" + rowcount);

                } else {
                    System.out.println("value is not present in resultset");
                }


                System.out.println("Get Row Count");
                    System.out.println(table_count);
            //      int cnt = rcnt(table_count);
                String updaterow = "update job_status_table set Source_rowcount ="
                        + rowcount
                        + " where Source_name = '"
                        + table_name
                        + "'";

                System.out.println("updateoutput" +stmt.executeUpdate(updaterow));

                System.out.println("Update Complete");

            }

    /*      if (conn != null) {

                rs.close();
                res1.close();
                stmt.close();
                conn.close();
                conn = null;
            }
            */
        }
        catch (SQLException sqle) {
            System.out.println("SQL Exception thrown: " + sqle);
        }
    }
}**

person Swapnil Dixit    schedule 16.07.2016    source источник
comment
Обратитесь к этому stackoverflow.com/questions/5840866/   -  person Piyush Gupta    schedule 16.07.2016
comment
Вы должны использовать другой объект оператора для выполнения запроса в цикле (и вы должны отключить автоматическую фиксацию).   -  person Mark Rotteveel    schedule 16.07.2016


Ответы (1)


Вы можете попробовать это:

Сначала скопируйте ResultSet rs в ArrayList и закройте его.

Переберите ArrayList и закройте res1 перед обновлением.

И я не думаю, что другое значение с «значение отсутствует в наборе результатов» достижимо, но если вы должны установить rowcount на 0.

ИЗМЕНИТЬ

После прочтения упомянутого вопроса во второй раз: проблема заключается в повторном использовании stmt для res1 и обновлении

person Turo    schedule 16.07.2016