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ę..