Hallo,
folgendes Problem.
Ich lade ein RS aus einer session, und will dann daraus Daten ziehen. Die betreffenden Codezeilen
sind folgene.
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:
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)