ResultSet aus Session geladen, aber kein Zugriff möglich

Status
Nicht offen für weitere Antworten.

BataL

Mitglied
Hallo,

folgendes Problem.

Ich lade ein RS aus einer session, und will dann daraus Daten ziehen. Die betreffenden Codezeilen
sind folgene.
Code:
<%
if(session.getAttribute("user") != null) {
	ResultSet user = (ResultSet)session.getAttribute("user");
	user.first();
%>
	Hello <%=user.getString("u_name")%>

Und zwar ist der Fehler den ich bekomme "Operation not allowed after result set is closed"
(Den kompletten error hab ich mal ganz unten gepostet)

Mir ist auch klar, dass dieser Fehler daher kommt, dass ich meine DB Verbindung geschlossen habe.
Aber was ich nicht verstehe ist weswegen das eine rolle spielt, wo ich das RS doch aus dem session objekt lade.

Ausserdem arbeite ich mit einem ConnectionPool (proxool). Der funktioniert wunderbar, aber wenn ich die DB
Verbindung nicht schliesse dann kann sie dem pool ja nicht mehr zur verfügung gestellt werden.

Ich bräuchte wirklich eure Hilfe, weil ich gar nicht weiß wo ich noch ansetzen soll. Evtl. schliesse ich die DBCon
an einer falschen Stelle? Hier einfach mal der Code der die Verbindung aufbaut:

Code:
package org.batal.jblog.db;

import java.sql.*;

import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;

public class DatabaseConnect {
	
	protected Connection conn;
		
	public DatabaseConnect()
	{
		try {
			JAXPConfigurator.configure("c:/Programme/Apache Software Foundation/Tomcat 
                                    5.0/webapps/jblog/WEB-INF/web.xml", false);
		} catch (ProxoolException e) {
			e.printStackTrace();
		}
	}
	
	public void connect()
	{
		try {
			Class.forName("org.logicalcobwebs.proxool.ProxoolDriver").newInstance();
			conn = DriverManager.getConnection("proxool.jblog");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
}
Code:
package org.batal.jblog.db;

import java.sql.*;

public class DatabaseActions extends DatabaseConnect {
	
	public DatabaseActions() 
	{
		super();
		connect();
	}
	
	public void close()
	{
		try {
			conn.close();
		} catch(SQLException e) {
			//
		}
	}
	
	public int checkUser( String user, String password ) throws SQLException {
		PreparedStatement ps = 
			conn.prepareStatement("SELECT * FROM users WHERE u_name='"+user+"' AND u_password='"+password+"'",
					ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
		ResultSet result = ps.executeQuery();
		result.beforeFirst();
		while( result.next() ) {
			return result.getInt("u_id");
		}
		return 0;
	}
	
	public ResultSet getUserByID( int id ) throws SQLException {
		try {
			PreparedStatement ps = 
				conn.prepareStatement("SELECT * FROM users WHERE `u_id`='"+id+"'",
					ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
			ResultSet result = ps.executeQuery();
			return result;
		} catch(SQLException ex) {
			ex.printStackTrace();
		}
		return null;
	}
	
	public ResultSet getPosts() throws SQLException {
		try {
			PreparedStatement ps = 
				conn.prepareStatement("SELECT * FROM articles ORDER BY a_date DESC",
					ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
			ResultSet result = ps.executeQuery();
			return result;
		} catch(SQLException ex) {
			ex.printStackTrace();
		}
		return null;
	}
	
	public ResultSet getSections() {
		try {
			PreparedStatement ps = 
				conn.prepareStatement("SELECT * FROM sections ORDER BY s_order ASC",
					ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
			ResultSet result = ps.executeQuery();
			return result;
		} catch(SQLException ex) {
			ex.printStackTrace();
		}
		return null;
	}
	
	public ResultSet getActionByName(String name) {
		try {
			PreparedStatement ps = 
				conn.prepareStatement("SELECT * FROM sections WHERE 
                                             s_action='"+name+"' ORDER BY s_order ASC",
					ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
			ResultSet result = ps.executeQuery();
			return result;
		} catch(SQLException ex) {
			ex.printStackTrace();
		}
		return null;
	}
}



Code:
23.09.2004 09:21:35 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.sql.SQLException: Operation not allowed after ResultSet closed
	at com.mysql.jdbc.ResultSet.checkClosed(ResultSet.java:3600)
	at com.mysql.jdbc.ResultSet.first(ResultSet.java:2340)
	at com.mysql.jdbc.UpdatableResultSet.first(UpdatableResultSet.java:413)
	at org.apache.jsp.login_jsp._jspService(org.apache.jsp.login_jsp:50)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:302)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:246)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:682)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:581)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:501)
	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
	at org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:82)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:302)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:246)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:311)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:106)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection
                 (Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:576)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
 

DP

Top Contributor
wenn du den resultset in die jsp schiebst, ist der imho schon zu.

da musste den rs in deinem code durchlaufen, auslesen und den container dann in deine jsp schieben...
 

Bleiglanz

Gesperrter Benutzer
Du kannst das Resultset nicht in eine Session legen (eigentlich keine chance) => wann willst du rs.close() machen? und wann connection.close()?


Bei einem Request wird ein Thread gestartet der nach dem Abschicken der jsp beendet wird, dabei endet der "scope" der Connection [und an dieser hängt das resultset]
 

akira

Bekanntes Mitglied
Kurzum, Du must Dir ein Transfer-Objekt "User" schreiben, in das Du die Daten aus dem ResultSet überträgst. Dieses Objekt hängst Du dann in die Session. Das ResultSet ist selbst in dem Sinne kein Datencontainer, sondern verliert mit dem Schließen des Statements oder der Connection seine Gültigkeit, es ist mehr ein Cursor auf die aktuelle DB-Zeile.

Ich habe in Deinem Code gesehen, daß Du eine permanente Connection verwendest, was eher unüblich/problematisch ist. Schließe die Connection nach jedem Statement besser wieder und fordere sie bei einem neuen Statement wieder an, sonst bekommst Du sicher irgendwann ein Timeout und die Connection ist weg.

edit: sorry, Du benutzt ja pro Action eine neue Connection, die Du allerdings nie schließt (?), zumindest nicht im gepostetn Code
 

BataL

Mitglied
richtig, nicht im geposteten code. ich hatte ja probleme, weil dann mein ers in der session immer weg war. das hab ich nur deswegen weggemacht, soll aber nicht so bleiben.
ich muss es ja schliessen wegen meinem pool.

im resultset steht jeweils eine ganze row. danach wird halt auf authorisationsebene usw überprüft. dazu brauch ich die einzelnen daten eben.

also ich hab jetzt ne bean dazwischen geschaltet, die daten aufnimmt. funktioniert soweit.

danke für die antworten.

falls noch jemand ne gute idee hat zum datenmanagement würde ich mich freuen wenn er hier kurz was drüber schreibt... (ide bean ist echt langsam ;))
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
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
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
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
S ResultSet closed Datenbankprogrammierung 2
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
S .leeres Resultset abfangen Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben