# Probleme mit statement.close()



## Samson_Miller (19. Feb 2008)

Ich mache eine Datenbankabfrage (DB2) folgendermaßen:


```
ResultSet rs = ppSt.executeQuery(); //ppSt ist ein PreparedStatement
connection.commit();
ppSt.close(); // Ein connection.close() gibt es nicht, die connection soll offen bleiben
```

Wenn ich das Statement nicht schließe ( also kein ppSt.close() ) dann funktioniert das. Aber ich habe gelesen, man sollte immer das Statement schließen, dann bekomme ich aber immer die Fehlermeldung:


```
COM.ibm.db2.jdbc.DB2Exception: [IBM][JDBC-Treiber] CLI0601E  Ungültige Anweisungskennung oder Anweisung ist beendet. SQLSTATE=S1000
```


----------



## SlaterB (19. Feb 2008)

vielleicht das Statement vor dem Commit schließen?


----------



## Samson_Miller (19. Feb 2008)

Das liefert den gleichen Fehler.


----------



## DP (19. Feb 2008)

frage 1: wieso commit bei einem query?

frage 2: wo bleibt der rs.close() vor dem ppSt.close()?


----------



## Samson_Miller (20. Feb 2008)

zu Frage 1: da autocommit auf false gesetzt wurde

zu Frage 2: da ich das ResultSet an eine andere Klasse weiterreiche und da weiterbearbeite, wenn ich an dieser Stelle schon rs.close() mache, dann danach damit nicht mehr arbeiten.


----------



## ms (20. Feb 2008)

Samson_Miller hat gesagt.:
			
		

> da autocommit auf false gesetzt wurde


Du brauchst beim Lesen keine Transaktion.



			
				Samson_Miller hat gesagt.:
			
		

> da ich das ResultSet an eine andere Klasse weiterreiche und da weiterbearbeite, wenn ich an dieser Stelle schon rs.close() mache, dann danach damit nicht mehr arbeiten.


Man reicht Resultsets nicht weiter.
Sagt dir "DAO" etwas?

ms


----------



## Samson_Miller (20. Feb 2008)

von DAO habe ich schonmal gehört, ich habe hier im Forum darüber gelesen.

So wie ich das verstanden habe müsste ich dann für jedes Select-Statement das ich habe eine Klasse erstellen, die die Werte aufnimmt, die Klasse verarbeite ich dann weiter. Oder sehe ich das falschn?


----------



## ms (20. Feb 2008)

Samson_Miller hat gesagt.:
			
		

> So wie ich das verstanden habe müsste ich dann für jedes Select-Statement das ich habe eine Klasse erstellen, die die Werte aufnimmt, die Klasse verarbeite ich dann weiter. Oder sehe ich das falschn?


Nicht für Select-Statements sondern für Entitäten.

ms


----------



## Samson_Miller (20. Feb 2008)

Ok, stimmt das macht mehr Sinn. Dann werde ich das wohl so machen.


----------



## ms (20. Feb 2008)

Es muss auch nicht unbedingt für jede Entität ein DAO geben. Hängt davon ab was du brauchst.
Vielleicht hilft dass hier noch: http://java.sun.com/blueprints/patterns/DAO.html

ms


----------



## Samson_Miller (21. Feb 2008)

alles klar, besten Dank


----------

