ResultSet closed

Status
Nicht offen für weitere Antworten.

PhantomXXL

Bekanntes Mitglied
Code:
		rs = mysql.QueryAllRecords("SELECT typ_id FROM pnc_rel_makro_funktionstyp WHERE makro_id='"+ makro+"'");

		while( rs.next() ) {

Das rs.next im while ruft hierbei den error:
Debug Interface 3(93): SQLException: Operation not allowed after ResultSet closed
Debug Interface 3(93): SQLState: S1000
Debug Interface 3(93): VendorError: 0

was mich wundert den dazwischen ist genau nur eine leerzeile. denoch wirft er die exception und behauptet auch noch das gerade erst geöffnete ist closed.

die methode QueryAllRecords sieht so aus:

Code:
	public ResultSet QueryAllRecords (String Querystring) {
		ResultSet rs;	
		try {
			rs = stmt.executeQuery(Querystring);
		} catch (SQLException e) {
			rs = null;
		}
		
		return rs;
	}

lustigerweise funktioniert die zweite methode QueryOneRecord einwandfrei, nutzt aber nichts da diese wirklich nur einen Eintrag auslesen soll (und kann)

Code:
	public ResultSet QueryOneRecord (String Querystring) {
		ResultSet rs;
		try {
			rs = stmt.executeQuery(Querystring);
			rs.next();
			if( !(rs.isLast() && rs.isFirst() ) ) {
				rs = null;	
			}
		} catch (SQLException e) {
			rs = null;
		}
		
		return rs;				
	}
 

Bleiglanz

Gesperrter Benutzer
du sollst kein Resultset als Rückgabewert einer Methode herumreichen! Vergiss diese Idee!


WO WANN UND WIE soll denn jemals dein stmt geschlossen werden?

Wenn du die Funktion ein zweites mal aufrufst, was ist dann mit stmt?

usw. usf.


oder die zugehörige connection???

Code:
      } catch (SQLException e) {
         rs = null;
      }
WAS IST DENN DAS? Wenn da ein Fehler fliegt dann kriegst du davon nichts mit??? mach irgenwas mit der ex!
 

PhantomXXL

Bekanntes Mitglied
was auch immer mit stmt is, wenn queryonerecord ruf ich vor dieser while 5 mal auf und es geht... einzig wenn ich ein queryallrecords mach gehts nicht mehr

und die exception is beabsichtigt einfah null, weil sonst wirft es auch wenn ncihts ind er tabelle steht diese, und die verbindungssachen werden e brav abgefangen

ich frag mich eher wieso sagt der immer das resultset ist geschlossen obwohl ich es NICHT schliesse .....
 

Bleiglanz

Gesperrter Benutzer
ja eben wegen dieser seltsamen Effekte sollst du sowas nicht machen!

A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.

By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists.

und wenn du dein rs mal rausgegeben hast, dann hast du wenig kontrolle über das stmt

bei einen hast du ja mit next() schon von der DB alles abgeholt, warum der bei der anderen das rs automatisch schliesst ist mir auch nicht klar (scope? lebensdauer?...)

kann dir nur sagen, dass man ein Resultset besser in dem Block lässt, wo es erzeugt wird...
 

DP

Top Contributor
hmm... mal ne frage zu dem rs im block lassen: wo ist denn das problem wenn ich ein rs an eine methode weiterreiche und dort auseinandernehme um die methoden lesbarer zu machen?!

hatte bisher keine probleme...
 

PhantomXXL

Bekanntes Mitglied
naja denke das problem ist mir jetzt klar:
das stmt is ne static, und in der while wird ein neuer aufruf (retrive the next result in a set of results) vond er methode gemacht, sprich ich mach das resultset auf geh in die while, in der while hol ich ein neues resultset, folglich wird das alte geschlossen. was beim nächsten rs.next eben diese exception raushaut
 

Bleiglanz

Gesperrter Benutzer
DP hat gesagt.:
hmm... mal ne frage zu dem rs im block lassen: wo ist denn das problem wenn ich ein rs an eine methode weiterreiche und dort auseinandernehme um die methoden lesbarer zu machen?!

hatte bisher keine probleme...

schau in diesen Thread und du siehtst ein Problem :)

Mein Hauptargument: wenn du einem Client erlaubst, mit

Code:
    ResultSet foo = irgeneineHilfMirSache.getErgebnis("SELECT * FROM Tutti");

ein ResultSet zu erhalten, dann

* ist der Client gezwungen, foo.close() aufzurufen (das darf er nicht vergessen!)

* gehts in Mutlithreaded Umgebungen sicher irgendwann schief

* ist das ResultSet an eine unsichtbare connection gezwungen, über die man keine Kontrolle hat

Ich hab aber auch SingleThreaded schon komische Sachen erlebt, ich lass das lieber ganz...


Alternative ist das Hollywoodprinzip

schreib dir einen Handler (ein Interface mit einer Methode doSomething(ResultSet rs)) und übergib das

Code:
    public query(String sql, Handler handler){

    ....alles aufmachen

    while(rs.next()){
           handler.doSomething(rs)
     }

    ...alles zumachen


}

kann man dann z.B. eine anonyme innere Klasse reinhauen oder sowas
 

PhantomXXL

Bekanntes Mitglied
habs jez umgebaut das man statement und resultset immer im programm aufmachen muss ausser bei einfachen querys wie insert, delete und update. die wurden sowieso vorher schon immer brav geschlossen.

macht den spass aber halt etwas unübersichtlicher da das query statt einer zeiel vor der verabreitung nu 4 zeilen, je 2 davor und dnach, sind.

und handler kenn ich noch gar nicht *g*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
S ResultSet closed Datenbankprogrammierung 2
A Operation not allowed after ResultSet closed Datenbankprogrammierung 13
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
Z ResultSet ist null warum? Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
C PostgreSQL ResultSet.TYPE_SCROLL_SENSITIVE setzen Datenbankprogrammierung 2
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
L Zugriff auf ein Resultset Datenbankprogrammierung 7
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
D Resultset schließen ?? Datenbankprogrammierung 5
T Oracle Resultset to Array sehr langsam. Datenbankprogrammierung 8
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
L ResultSet Datenbankprogrammierung 1
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
R MySQL Umgang mit ResultSet/Fremdschlüssel ausgeben Datenbankprogrammierung 2
D MySQL ResultSet als Stream weiter geben Datenbankprogrammierung 9
M ResultSet Cachen Datenbankprogrammierung 3
R ResultSet mit "Untertabellen" Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R Resultset.last() Problem Datenbankprogrammierung 12
PaulG Leeres ResultSet initialisieren Datenbankprogrammierung 6
J Frage zu ResultSet Datenbankprogrammierung 3
J SQL ResultSet Previous Datenbankprogrammierung 10
S MySQL ResultSet in ein Array übertragen Datenbankprogrammierung 7
H PostgreSQL Objekte aus ResultSet Datenbankprogrammierung 5
O Oracle Resultset greift auf Spaltenüberschriften zu Datenbankprogrammierung 2
Kenan89 Wieso klappt das ResultSet nicht? Datenbankprogrammierung 3
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
F Derby/JavaDB Resultset in JTablemodel Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
B SQLite ResultSet is TYPE_FORWARD_ONLY Datenbankprogrammierung 5
T Exception ResultSet Datenbankprogrammierung 7
0 ResultSet in JTable Datenbankprogrammierung 14
S [SQL] ResultSet Datenbankprogrammierung 4
R ResultSet Datenbankprogrammierung 4
I Sonderbehandlung wenn ResultSet leer ist Datenbankprogrammierung 9
I Problem mit ResultSet Datenbankprogrammierung 2
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
B ResultSet wirft komische NullPointerException. Datenbankprogrammierung 3
R Detached ResultSet Datenbankprogrammierung 3
F generelle Vorgehensweise ResultSet Datenbankprogrammierung 5
S ResultSet Datenbankprogrammierung 2
A MySQL ResultSet.updateBytes schlägt fehl Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
D ResultSet gibt nichts aus. Datenbankprogrammierung 3
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
ARadauer JDBC ResultSet schließen? Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
J jdbc ResultSet types Datenbankprogrammierung 5
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
F ResultSet to String[] Datenbankprogrammierung 3
E ResultSet in HashMap Datenbankprogrammierung 8
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
M Problem mit ResultSet bei SQL Server 2005 Datenbankprogrammierung 6
S ResultSet in ArrayList ablegen Datenbankprogrammierung 17
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
T ResultSet initialisieren Datenbankprogrammierung 2
C kein Resultset Datenbankprogrammierung 2
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
T ResultSet-Inhalt in Arrays schreiben Datenbankprogrammierung 3
S ResultSet variabel auslesen Datenbankprogrammierung 4
D Anzahl der Elemente im ResultSet ermitteln Datenbankprogrammierung 8
A Leeres ResultSet mit H2 unter Vista Datenbankprogrammierung 3
A Warum ist mein ResultSet leer? Datenbankprogrammierung 5
Z ResultSet mit einer anderen Datenquelle Datenbankprogrammierung 7
O Spaltenname aus Resultset Datenbankprogrammierung 2
thE_29 ResultSet und doppelte Spalten Datenbankprogrammierung 4
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
E ResultSet vergisst Reihe? Datenbankprogrammierung 2
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
F ResultSet refresh moeglich? Datenbankprogrammierung 3
S ResultSet enthält keine Daten Datenbankprogrammierung 2
B Geschlossenes ResultSet Datenbankprogrammierung 6
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
T ResultSet schließen? Datenbankprogrammierung 6
S Tabelle updaten wenn ResultSet aus JDBC-Quelle Datenbankprogrammierung 2
S ResultSet Datenbankprogrammierung 6
F Filtern innerhalb eines Resultset Datenbankprogrammierung 12
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
@ Like-Klausel; NPE bzw. leeres ResultSet Datenbankprogrammierung 4
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
B No ResultSet was produced Datenbankprogrammierung 2
S ResultSet erweitern ? Datenbankprogrammierung 4
E JDBC, ForwardOnly bei ResultSet nach Uebergabe Datenbankprogrammierung 4
R ResultSet liefert oracle.sql.TIMESTAMP, aber unbrauchbar Datenbankprogrammierung 9
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
RaoulDuke ResultSet - Wie arbeitet sowas intern Datenbankprogrammierung 2
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
T MAX und ResultSet#next Datenbankprogrammierung 10
R ResultSet zu bestimmtem DS navigieren Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben