executeQuery bricht for-Schleife ab

Maxder

Mitglied
Ich habe in meinem Programm eine Verbindung mit einer Access-Datenbank hergestellt. Nun soll das Programm in jede Zeile der Spalte Zufallsschluessel einen Zufallsstring der aus drei Zeichen besteht einsetzen. Mein Quellcode mit dem ich den Zufallsgenerator aufrufe sieht so aus:
[JAVA=42]
String allowedChars = "abcdefghijklmnopqrstuvwxyz";
Random random = new Random();
for (int id=1; id<106; id++){
String randomString = generateRandomString(allowedChars, random);
System.out.println(randomString);
String sqlString = "UPDATE Tabelle1 SET Zufallsschluessel = '" + randomString + "' WHERE ID="+id+"";
System.out.println(sqlString);
sqlStatement = dbVerbindung.createStatement();
System.out.println("test1");
resultSet = sqlStatement.executeQuery(sqlString);
System.out.println("test2");
}
[/code]
Der Quellcode der Zufallsgeneratorklasse sieht so aus:
[JAVA=42]
private String generateRandomString(String allowedChars, Random random) {
int max = allowedChars.length();
StringBuffer buffer = new StringBuffer();
for (int i=0; i<3; i++){
int value = random.nextInt(max);
buffer.append(allowedChars.charAt(value));
}
return buffer.toString();
}
[/code]

Nun bricht die for-Schleife nach dem executeQuery ab, auch die Ausgabe von test2 erfolgt nicht und er schreibt mir nur in die erste Zeile den Zufallsstring.
Wenn ich den executeQuery weglasse zeigt er zwar jedes mal den sqlString korrekt an, aber die Änderungen in der Datenbank werden ja nicht ausgeführt.
Weis jemand was ich da machen muss?
 

parabool

Bekanntes Mitglied
executeQuery ermöglicht nur Abfragen (select)
verwende executeUpdate.

(müsste eigentlich auch eine entspr. Fehlermeldung kommen)
 

Maxder

Mitglied
Dann bekomme ich folgende Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from int to ResultSet

at Niko$1.actionPerformed(Niko.java:97)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 

parabool

Bekanntes Mitglied
naja, executeUpdate gibt keine ResultSet zurück sondern ein int, welches die
Anzahl der geänderten Datensätze...

also int anz = executeUpdate...
 

Maxder

Mitglied
Habs gerade bemerkt:
Jetzt bricht er die for-Schleife nach einer willkürlichen Anzahl von Wiederholungen die sich nach jedem Programmstart ändert ab.
 

Maxder

Mitglied
Es wird keine Fehlermeldung angezeigt, er macht einfach nicht weiter. Ich habe auch schon ein bisschen gewartet aber er hat nicht weitergemacht. Er ist aber schon zweimal ganz durchgelaufen, von ungefähr 150 Versuchen, habe nicht genau mitgezählt.
 

parabool

Bekanntes Mitglied
Wenn die For-Schleife nicht durchlaufen wird, müsste eigentlich irgenwo auch eine
Fehlermeldung kommen.
Ich schätze, eine Exception wird irgendwo "verschluckt" also der catch - Block ist leer.
Ausgelöst vielleich von einer Instabilen DB-Verbindung ?

schau mal , ob Du in allen Exceptions eine Fehlerausgabe im catch - Block hast.
 

Maxder

Mitglied
OK, danke es funktioniert jetzt. Der eine Catch-Block war leer und da habe ich print stacktrace eingefügt, dann kam die Fehlermeldung, wenn in dem Zufallsstring ein Anführungszeichen drin war, das hab ich jetzt rausgenommen.
 

Ähnliche Java Themen


Oben