# executeQuery bricht for-Schleife ab



## Maxder (23. Jan 2012)

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 (23. Jan 2012)

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

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


----------



## Maxder (23. Jan 2012)

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 (23. Jan 2012)

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

also int anz = executeUpdate...


----------



## Maxder (23. Jan 2012)

ok danke es geht


----------



## Maxder (23. Jan 2012)

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


----------



## parabool (23. Jan 2012)

Fehlermeldung ?


----------



## Maxder (23. Jan 2012)

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 (23. Jan 2012)

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 (24. Jan 2012)

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.


----------

