ResultSet close() in funktion nich möglich.

student86

Mitglied
Guten Tag.

Ich hab ein problem das ich ein ResultSet nich geschlossen bekomme.

undzwar habe ich eine funktion wele mir eine sql tabelle ausließt und das result set übergibt.
Java:
public static ResultSet auslesen(String tabellename){
Resultset result2 = null;
try {
Statement stm = MSSQLconnection.createStatement();
Resultset result = stm.executeQuery("Select* FROM "+tabellename);
return result;
}catch (SQLException e){
e.printStackTrace();
return result2;
}}

Ich könnte AUS DEM RESULT SET EIN arrayObjekt erstellen und das übergeben, das aber kompliziert und ich ich brauch das öfters. kann ich das resultset irgendwie closen ? wo muss der beffehl hin ?

Oder gibt es einen befehl der mir aufeinmal alle offenen statements und resultsets closed ?

MFG
 
Daten kopieren ist in der Tat eine Variante,
mit einer allgemeinen Standard-Methode dafür hier nur eine Zeile, ein Aufruf,

oder wenn du das ResultSet zurückgibst, muss der Aufrufer close() ausführen, Statement natürlich auch noch interessant..

> Oder gibt es einen befehl der mir aufeinmal alle offenen statements und resultsets closed ?
auch eine gute Möglichkeit, an sich ist dazu nichts vorgesehen, aber du selber kannst ja in eigenen Datenstrukturen sammeln,
alles was nötig ist dazu bauen,
auch wieder allgemein vielleicht etwas Aufwand, in der Methode aber eher nur eine Zeile,
vielleicht sogar in createStatement() versteckt, dann hier gar kein Aufwand,

irgendjemand irgendwo muss natürlich close() aufrufen, diese Methode weiterhin kaum
 
>oder wenn du das ResultSet zurückgibst, muss der Aufrufer close() ausführen, Statement natürlich auch noch interessant..

wie ist das möglich ?

Java:
public static ResultSet auslesen(String tabellename){
Resultset result2 = null;
try {
Statement stm = MSSQLconnection.createStatement();
Resultset result = stm.executeQuery("Select* FROM "+tabellename);
return result;
}catch (SQLException e){
e.printStackTrace();
return result2;
}}

public static void anzeigen(){

Result result2 = Programm.auslesen("test");
try{
while(result2.next()){
System.out.println(result2.getString(1));
}
catch.......
}
 
Eigentlich solltest du das ResultSet erst gar nicht rausgeben!

Die DB-Zugriffsschicht sollte die Daten aus dem ResultSet lesen und in eine entsprechende Struktur bringen (Klassen..Stichwort OOP 😀) und anschließend schließt du das ResultSet wieder.
 
@ Michael:

das is nich möglich da die Methode nach dem return result zuende ist und alles was danach kommt wird nicht mehr aufgerufen. und wenn man es vorher schließt ist das result leer bevor es zurückgegeben wird.
 
das is nich möglich da die Methode nach dem return result zuende ist
?? Und worin besteht dann das Problem? Die Methode liefert ja eine Referenz auf den ResultSet nach "aussen".
In der aufrufenden Methode "anzeigen" referenziert dann die Variabel
Code:
result2
auf diesen ResultSet. Also kann man mittels dieser Variable den ResultSet schließen.
Aber grundsätzlich muss ich KSG9|sebastian zustimmen, wenn man es sauber machen will.

Die Variable result2 in der "auslesen" Methode ist völliger Käse.
 
Michael meint ja auch in der Methode anzeigen.
Dort sollst du es schließen und am besten im finally Zweig vom try-catch.

Noch besser wäre allerdings, was KSG9|sebastian geschrieben hat. Das ResultSet sollte man normal nicht zurückgeben.
 

Neue Themen


Zurück
Oben