# CallableStatement



## KalleWirsch (6. Mai 2009)

Hi zusammen,

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


```
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 (6. Mai 2009)

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 (6. Mai 2009)

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 (6. Mai 2009)

KalleWirsch hat gesagt.:


> 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


----------



## KalleWirsch (6. Mai 2009)

gut dann weiß ich ja wenigstens jetzt das es an der Prozedur liegt.

vielen Dank für deine Hilfe.

Grüße!


----------

