ResultSet.getString (1) löst java.sql.SQLException aus: Ungültige Operation an der aktuellen Cursorposition
Wenn ich das folgende Servlet ausführe:
<code>// package projectcodes; public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { String UserID = request.getParameter("UserID"); String UserPassword = request.getParameter("UserPassword"); String userName = null; String Email = null; Encrypter encrypter = new Encrypter(); String hashedPassword = null; try { hashedPassword = encrypter.hashPassword(UserPassword); Context context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/photog"); Connection connection = ds.getConnection(); String sqlStatement = "SELECT email,firstname FROM registrationinformation WHERE password='" + hashedPassword + "'"; PreparedStatement statement = connection.prepareStatement(sqlStatement); ResultSet set = statement.executeQuery(); userName = set.getString(1); // <<---------- Line number 28 response.sendRedirect("portfolio_one.jsp"); // userName = set.getString("FirstName"); Email = set.getString(3); if(set.wasNull() || Email.compareTo(UserID) != 0) { // turn to the error page response.sendRedirect("LoginFailure.jsp"); } else { // start the session and take to his homepage HttpSession session = request.getSession(); session.setAttribute("UserName", userName); session.setMaxInactiveInterval(900); // If the request doesn't come withing 900 seconds the server will invalidate the session RequestDispatcher rd = request.getRequestDispatcher("portfolio_one.jsp"); rd.forward(request, response); // forward to the user home-page } }catch(Exception exc) { System.out.println(exc); } </code>
Ich bekomme folgende Ausnahmen:
<code>INFO: java.sql.SQLException: Invalid operation at current cursor position. at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) at org.apache.derby.client.am.ResultSet.getString(Unknown Source) at com.sun.gjc.spi.base.ResultSetWrapper.getString(ResultSetWrapper.java:155) -----> at projectcodes.ValidateDataForSignIn.doPost(ValidateDataForSignIn.java:28 at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) Caused by: org.apache.derby.client.am.SqlException: Invalid operation at current cursor position. at org.apache.derby.client.am.ResultSet.checkForValidCursorPosition(Unknown Source) at org.apache.derby.client.am.ResultSet.checkGetterPreconditions(Unknown Source) ... 30 more </code>
Die obigen Protokolle vom Server zeigen, dass Zeile 28 die Ursache für die Ausnahme ist. Aber ich kann keinen Grund für eine Ausnahme finden. Alle Spalten in der Tabelle haben den Datentyp varchar.
Ich habe Zeilennummer 28 markiert(Ausnahmefall laut Server Logs) im Servlet-Code.