2013-07-26 29 views
-1
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.xml.ws.Response; 

import com.sun.corba.se.spi.activation.Repository; 

/** 
* Servlet implementation class DeleteControl 
*/ 
public class DeleteControl extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    ResultSet rs = null; 
    Statement st = null; 
    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public DeleteControl() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     String str = request.getParameter("hiddenValue"); 
     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 

      Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Student","root","root"); 
      //here sonoo is the database name, root is the username and root is the password 

      PreparedStatement ps = con.prepareStatement("delete from login where studentId= ? ;"); 
      ps.setString(1, str); 
      ps.executeUpdate(); 
      st = con.createStatement(); 
      rs= st.executeQuery("select * from login"); 
      con.close(); 
      }catch(Exception e){ System.out.println(e);} 
      request.setAttribute("resultset", rs); 
      RequestDispatcher rd = request.getRequestDispatcher("userHome.jsp"); 
      rd.forward(request, response); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

} 

,它给错误这样eroor同时删除条目,并从servlet的结果集发送到jsp页面

HTTP Status 500 - 

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: javax.servlet.ServletException: java.sql.SQLException: Operation not allowed after ResultSet closed 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:502) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:412) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    DeleteControl.doGet(DeleteControl.java:57) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
root cause 

javax.servlet.ServletException: java.sql.SQLException: Operation not allowed after ResultSet closed 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:865) 

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:794 ) org.apache.jsp.userHome_jsp._jspService(userHome_jsp.java:106) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(的HttpServlet。 java:717) org.apache.jasper.servlet.JspServletWrapper 。服务(JspServletWrapper.java:388) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 的javax。 servlet.http.HttpServlet.service(HttpServlet.java:717) DeleteControl.doGet(DeleteControl.java:57) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet 。服务(HttpServlet.java:717)根 原因

java.sql.SQLException中:不允许操作结果集关闭 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) com.mysql之后。 jdbc.SQLError.createSQLExcep重刑(SQLError.java:989) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) com.mysql.jdbc.ResultSetImpl .checkClosed(ResultSetImpl.java:804) com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6986) org.apache.jsp.userHome_jsp._jspService(userHome_jsp.java:81) org.apache.jasper。 runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) 组织.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet .java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) DeleteControl.doGet(DeleteControl.java:57) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)note注意根本原因的完整栈跟踪 可在Apache Tomcat/6.0.35日志中找到。

的Apache Tomcat/6.0.35

回答

0

你的代码是一个可怕的混乱,你在这里创建多个内存泄漏。使用像Tomcat JDBC Pool和Apache Commmons DbUtils这样的DataSource工厂专注于您的问题。

此外,删除后不执行conn.commit()。您处于自动提交模式。你永远不应该在自动提交模式下工作。

你传递一个已经被连接关闭的结果集。

+0

谢谢你的回答我还有一个问题,如果我要在forwrd方法后关闭连接,那么在forwad方法执行后如何执行代码? – NILL

+0

您可以使用finally块,但最好是在渲染视图之前分离数据。 –