CallableStatement

Status
Nicht offen für weitere Antworten.

KalleWirsch

Aktives Mitglied
Hi zusammen,

ich führe mit folgendem Code eine Funktion zum updaten der DB aus der DB (Postgres-SQL) durch

Java:
CallableStatement cStmt = conn.prepareCall("{call updateFunction(?)}");
cStmt.setString(1, "test");
cStmt.registerOutParameter(1, Types.BIGINT);
cStmt.executeUpdate();
wordCount = Integer.parseInt(cStmt.getObject(1).toString());
cStmt.close();


Beim ersten durchlauf funktioniert alles einwandfrei.
Wenn ich jetzt aber die Funktion mehrmals (>1) aufrufe dann bleibt das Programm bei executeUpdate() hängen.
Woran liegt das bzw wie kann ich das verhindern? gibt es eine möglichkeit zu prüfen ob das CallableStatement 'executebar' ist?

LG, KalleWirsch
 

Ebenius

Top Contributor
Wieso executeUpdate() und nicht execute()? Was passiert in der updateFunction()-Prozedur? Schonmal commit oder rollback auf der Connection probiert? Hast Du das gleiche Problem, wenn die Prozedur leer ist (wegen Table- / Row Locks)? Hast Du das Problem, wenn Du auf der selben Verbindung arbeitest, oder auf verschiedenen, oder beides?

Ebenius
 

KalleWirsch

Aktives Mitglied
executeUpdate() steht da nur weil ich etwas ausprobiert habe nachdem es mit execute() auch nicht geklappt hat.
In der updateFunktion wird einfach eine Tabelle mit einer anderen verglichen und dann mit deren Daten geschieht das update. Zurückgegeben wird die Spaltensumme einer Spalte der erneuerten Tabelle.
Das Problem tritt nur auf wenn ich auf der gleichen Verbindung arbeite. Allerdings immer beim zweiten execute. Das erste funktioniert einwandfrei das zweite nicht.


Wenn ich zum Schluss einen rollback mache funktioniert die Prozedur auch mehrmals hintereinander.
Woran könnte es dann gelegen haben. Tabellen bzw ZeilenLock?

Grüße
 

Ebenius

Top Contributor
Wenn ich zum Schluss einen rollback mache funktioniert die Prozedur auch mehrmals hintereinander.
Woran könnte es dann gelegen haben. Tabellen bzw ZeilenLock?
Commit funktioniert dann sicher auch. Warum das sonst nicht geht, hängt vom Inhalt der Prozedur ab. Die kenne ich natürlich nicht. :)

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben