ResultSet is closed zamknięte połączenie z b.d. Access

0

Witam serdecznie,

chciałam się zapytać o jeden błąd. Mam jedną tab. c_k, w której jest kolumna k_bledow, gdzie są zapisywane błędy jeśli użytkownik np nie wprowadzi danych do pozostałych kolumn. To mi działa jednak , pierwsza pętla while nie działa do końca poprawnie . Wyłapuje 1 błąd i przestaję dalej sprawdzać.

Komunikat błędu przedstawia się w następujący sposób:

ok967.5
błąd1201ee
java.sql.SQLException: ResultSet is closed
        at sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(JdbcOdbcResultSet.java:6646)
        at sun.jdbc.odbc.JdbcOdbcResultSet.next(JdbcOdbcResultSet.java:1249)
        at Aplikacja.jButton1ActionPerformed(Aplikacja.java:430)
        at Aplikacja.access$200(Aplikacja.java:35)
        at Aplikacja$3.actionPerformed(Aplikacja.java:109)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6289)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6054)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4652)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
        at java.awt.EventQueue.access$000(EventQueue.java:85)
        at java.awt.EventQueue$1.run(EventQueue.java:603)
        at java.awt.EventQueue$1.run(EventQueue.java:601)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
        at java.awt.EventQueue$2.run(EventQueue.java:617)
        at java.awt.EventQueue$2.run(EventQueue.java:615)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

kod obsługi przycisku w ten sposób:

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        Connection con = null;
        Statement stmt = null;  Statement stmt2 = null;
        try {
            String name;
            String type, dlugosc;
            int update;
            Properties props = new Properties();
            props.put("charSet", "Cp1250");
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:kasia", props);

            DatabaseMetaData metadata = con.getMetaData();
            ResultSet resultSet = metadata.getColumns(null, null, "c_k", null);
            String query = "select Dlugosc from c_k";
			stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

            try {
                ResultSet rs = stmt.executeQuery(query);
                while (rs.next()) {
                    dlugosc = rs.getString("Dlugosc").replace(",", ".");
                    if (dlugosc.matches("[0-9.]+.[0-9]")) {
                        System.out.println("ok" + dlugosc);

                    } else {
                        System.out.println("błąd" + dlugosc);
                             stmt.executeUpdate("UPDATE c_k SET k_bledow=k_bledow & 'zły format:Dlugosc;' WHERE Dlugosc = '" + dlugosc + "' ");
                     }
                }
            } catch (Exception e) {
             e.printStackTrace(); 
            }
		stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
  
           while (resultSet.next()) {
             
                try {
                    name = resultSet.getString("COLUMN_NAME");
                    type = resultSet.getString("TYPE_NAME");
                    //    System.out.println("Column name: [" + name + "]; type: [" + type + "]; ");
                    if (type.equals("VARCHAR")) {
                       stmt.executeUpdate("UPDATE c_k SET k_bledow=k_bledow & 'brak:" + name + ";'WHERE " + name + " = '' ");

                    }
                } catch (Exception e) {
                 e.printStackTrace();
                }
            }

            stmt.executeUpdate("UPDATE c_k SET k_bledow=k_bledow & 'zły:FV_FVK;' WHERE FV_FVK <> 'FV' AND FV_FVK <> 'FVK'");
            stmt.close();  
            con.close();

        } catch (Exception e) {
            System.out.println("Error 2: " + e);
        }       
    } 

Rozumiem że ResultSet jest zamknięte, ale nie wiem za bardzo jak naprawić błąd. Prosiłabym uprzejmie o wskazówkę..

1

Wydaje mi się, że polecenie

   stmt.executeUpdate("UPDATE c_k SET k_bledow=k_bledow & 'zły format:Dlugosc;' WHERE Dlugosc = '" + dlugosc + "' ");

generuje wyjątek. Zamień je na:

   try
   {
       stmt.executeUpdate("UPDATE c_k SET k_bledow=k_bledow & 'zły format:Dlugosc;' WHERE Dlugosc = '" + dlugosc + "' ");
   }
   catch(Exception ex)
   {
       //wypisanie informacji o błędzie
   }

1 użytkowników online, w tym zalogowanych: 0, gości: 1