Hallo zusammen,
Ich bin gerade auf ein Problem gestoßen, bei dem ich keine richtig befriedigende Antwort finden konnte.
Es geht darum, Datenbankabfragen in einer Handler-Klasse zu zentralisieren, die sich dann auch um das Öffnen und Schließen der Connections kümmern soll. Leider wird dann auch das ResultSet geschlossen, das ich eigentlich zurückgeben wollte.
Die Funktion im Handler sieht ungefähr so aus:
Die aufrufende Funktion kann jetzt nicht mit dem ResultSet arbeiten. Als Fehler erhält man da:
Ich sehe jetzt nur 2 Möglichkeiten:
Die erste Lösung finde ich unschön und bei der zweiten Lösung weiß ich nicht, was ich sonst zurückgeben sollte. Die Methode soll ja generisch bleiben und gar nicht wissen, welche Daten sie holt.
Vielleicht fällt ja hier jemand eine andere, bessere Lösung ein
Wie gesagt: Dass sich die aufrufende Funktion um das Schließen der Connection kümmert, wäre ja kein Problem - ich find's nur unschön und wollte das eigentlich in diesen generischen Funktionen mit kapseln.
Beste Grüße,
/tehK
Ich bin gerade auf ein Problem gestoßen, bei dem ich keine richtig befriedigende Antwort finden konnte.
Es geht darum, Datenbankabfragen in einer Handler-Klasse zu zentralisieren, die sich dann auch um das Öffnen und Schließen der Connections kümmern soll. Leider wird dann auch das ResultSet geschlossen, das ich eigentlich zurückgeben wollte.
Die Funktion im Handler sieht ungefähr so aus:
Java:
protected ResultSet genericSelect(String sql) {
ResultSet rs = null;
Connection conn = null;
PreparedStatement ps = null;
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
} catch (Exception e) {
// Exception handling
} finally {
close(ps, conn);
}
return rs;
}
Die aufrufende Funktion kann jetzt nicht mit dem ResultSet arbeiten. Als Fehler erhält man da:
java.sql.SQLException: Operation not allowed after ResultSet closed
Ich sehe jetzt nur 2 Möglichkeiten:
- Die aufrufende Funktion muss sich um das Schließen der Connection kümmern
- Ich darf kein ResultSet zurückgeben
Die erste Lösung finde ich unschön und bei der zweiten Lösung weiß ich nicht, was ich sonst zurückgeben sollte. Die Methode soll ja generisch bleiben und gar nicht wissen, welche Daten sie holt.
Vielleicht fällt ja hier jemand eine andere, bessere Lösung ein
Wie gesagt: Dass sich die aufrufende Funktion um das Schließen der Connection kümmert, wäre ja kein Problem - ich find's nur unschön und wollte das eigentlich in diesen generischen Funktionen mit kapseln.
Beste Grüße,
/tehK