2012-07-27 35 views
0

在我的項目中,我創建了一個取消帳戶工具來刪除用戶表中的帳戶。用戶表名是newuser。該cancelaccount JSP的樣子:Exhausetd ResultSet在從特定列中提取時出錯

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <style type="text/css"> 
body { 
background-image: url("shocked.jpg"); 
background-repeat:no-repeat; 
background-position: top right; 
} 
p 
{ 
    font-family: serif; 
    font-weight: bold; 
    color: blue; 
    size: 5px; 
    text-align: center; 
} 

</style> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 

<form action="Cancelaccount" name="cancelaccount"> 
<p>Are you sure to cancel account?</p> 
<p>If yes please retype the password</p> 
<p><input type="password" align="middle" name="password"></input></p> 
<input type="submit" value="Cancel Account"></input> 
<p>Else click <a href="UserHome.jsp">here</a></p> 
</form> 
</body> 
</html> 

Cancelaccount servlet中,我試圖以配合與賬戶開放註冊的密碼當前輸入的密碼。如果它們匹配的帳戶應該被取消,否則not.So servlet代碼是:

import getset.Getset; 

import java.io.IOException; 
import java.io.PrintWriter; 

import java.sql.SQLException; 

import accessdb.Dao; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class Cancelaccount extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, 
         HttpServletResponse response) throws ServletException, 
                   IOException { 
     // TODO Auto-generated method stub 
     Getset g = new Getset(); 
     Dao dao = new Dao(); 
     PrintWriter pw = response.getWriter(); 
     String password = request.getParameter("password"); 
     HttpSession session = request.getSession(); 
     String userid = (String)session.getAttribute("userid"); 
     if (password.equals("") || password.equals(" ")) 
      response.sendRedirect("UserHome.jsp"); 
     g.setuserid(userid); 
     g.setloginpassword(password); 
     try { 
      String password1 = dao.getregpasswordbyuserid(g); 
      if (password1 == password) { 
       dao.cancelaccount(g); 
       pw.println("<html>Your Account has been successfully cancelled from the system.<p>" + 
          "Click here to go to <a href=\"WelcomePage.jsp\">Start Page</a><html>"); 
       session.invalidate(); 

      } else { 
       response.sendRedirect("UserHome.jsp"); 
      } 


     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

DAO功能的代碼是:

public void cancelaccount(Getset g)throws ClassNotFoundException,SQLException{ 
    //Delete a user from NEWUSER TABLE AND MEALDB TABLE 
    Connection con=Dbconnection.getConnection(); 
    String userid=g.getuserid(); 
    PreparedStatement pstmt=con.prepareStatement("delete from mealdb where userid=?"); 
    pstmt.setString(1, userid); 
    pstmt.executeUpdate(); 
    PreparedStatement pstmt1=con.prepareStatement("delete from newuser where userid=?"); 
    pstmt1.setString(1, userid); 
    pstmt1.executeUpdate(); 
} 
public String getregpasswordbyuserid(Getset g)throws ClassNotFoundException,SQLException{ 
    //GET PASSWORD BY USERID 
    Connection con=Dbconnection.getConnection(); 
    String userid=g.getuserid(); 
    PreparedStatement pstmt=con.prepareStatement("select regpassword from newuser where userid=?"); 
    pstmt.setString(1, userid); 
    ResultSet rs=pstmt.executeQuery(); 
    rs.next(); 
    String p=rs.getString(1); 
    System.out.println(""+p); 
    return p; 

} 

而且stacktrace是:

11:35:29,912 ERROR [STDERR] java.sql.SQLException: Exhausted Resultset 
    11:35:29,912 ERROR [STDERR]  at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) 
    11:35:29,912 ERROR [STDERR]  at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) 
    11:35:29,912 ERROR [STDERR]  at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227) 
    11:35:29,912 ERROR [STDERR]  at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:347) 
    11:35:29,912 ERROR [STDERR]  at accessdb.Dao.getregpasswordbyuserid(Dao.java:245) 
    11:35:29,912 ERROR [STDERR]  at Cancelaccount.doGet(Cancelaccount.java:39) 
    11:35:29,912 ERROR [STDERR]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
    11:35:29,912 ERROR [STDERR]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    11:35:29,912 ERROR [STDERR]  at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    11:35:29,912 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    11:35:29,912 ERROR [STDERR]  at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) 
    11:35:29,912 ERROR [STDERR]  at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 
    11:35:29,912 ERROR [STDERR]  at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    11:35:29,912 ERROR [STDERR]  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241) 
    11:35:29,912 ERROR [STDERR]  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    11:35:29,912 ERROR [STDERR]  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580) 
    11:35:29,912 ERROR [STDERR]  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    11:35:29,912 ERROR [STDERR]  at java.lang.Thread.run(Unknown Source) 

DAO s'cancelaccount函數中我也從另一個表mealdb中刪除了,因爲userid字段爲primary keynewuserforeign keymealdb。我看着它很難,但找不到方法。謝謝。

回答

0

的問題已經解決。我只是改變了servlet代碼,它工作。沒有成功提取會話中的值userid。工作代碼是:

import getset.Getset; 

import java.io.IOException; 
import java.io.PrintWriter; 

import java.sql.SQLException; 

import accessdb.Dao; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class Cancelaccount extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doGet(HttpServletRequest request, 
         HttpServletResponse response) throws ServletException, 
                   IOException { 
     // TODO Auto-generated method stub 
     Getset g = new Getset(); 
     Dao dao = new Dao(); 
     PrintWriter pw = response.getWriter(); 
     String password = request.getParameter("password"); 
     System.out.println("" + password); 
     HttpSession session = request.getSession(true); 
     String userid = (String)session.getAttribute("USERID"); 
     System.out.println("" + userid); 
     /* if(password.equals("") || password.equals(" ")) 
    { 
    response.sendRedirect("UserHome.jsp"); 

    } */ 
     g.setuserid(userid); 
     try { 
      String password1 = dao.getpasswordbyuserid(g); 
      System.out.println("" + password1); 
      if (password1.equals(password)) { 
       dao.cancelaccount(g); 
       pw.println("<html>Your Account has been successfully cancelled from the system.<p>" + 
          "Click here to go to <a href=\"WelcomePage.jsp\">Start Page</a><html>"); 
       session.invalidate(); 

      } else { 
       response.sendRedirect("UserHome.jsp"); 
      } 


     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

    } 
} 
+0

並感謝@MaVRoSCy您毫無疑問的合作。 – Mistu4u 2012-07-27 09:04:50

0

嘗試在getregpasswordbyuserid()更改代碼

ResultSet rs=pstmt.executeQuery(); 
String p=""; 
while(rs.next()){ 
    p=rs.getString(1); 
    System.out.println(""+p); 
} 
return p; 
+0

對不起,沒有使它運行! – Mistu4u 2012-07-27 06:58:46

+0

PreparedStatement pstmt = con.prepareStatement(「從usedb中刪除where userid =?」,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE); – MaVRoSCy 2012-07-27 07:02:05

+0

在getregpasswordbyuserid()中也使用它,你的問題來自我認爲 – MaVRoSCy 2012-07-27 07:03:25