如何使用jsp从数据库中删除选定的数据?

时间:2015-07-23 18:18:49

标签: mysql jsp jdbc sql-delete

jdbcData.jsp这显示了整行的结果 以及带有操作链接的表reg的列 删除。我只想删除它 单击删除时数据行打开 链接。我该怎么办?

注意:第二个scriptlet命名为jdbcDelete.jsp。

jdbcData.jsp

 <% 
     Statement st =null;
     ResultSet rs =null;
     String s1 = request.getParameter("fn");
     Class.forName("com.mysql.jdbc.Driver");
     Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");

     st =con.createStatement();
     rs=st.executeQuery("select * from reg");
 %>
 <table border="1" align="center" cellpadding="10dx" summary="all posts" >

 <tr>
     <td><b>Id</b></td>
     <td><b>First Name</b></td>
     <td><b>Last Name</b></td>
     <td><b>Action</b></td>
 </tr>

 <% 
     while(rs.next()) {          
         int a = rs.getInt("id");
         String b =rs.getString("fname");
         String c=rs.getString("lname");
 %>
 <tr>
     <td><%out.println(a);%></td>
     <td><%out.println(b);%></td>
     <td><%out.println(c);%></td>
     <td><a href="jdbcDelete.jsp?id1=<%=a%>">Delete</a></td>
 </tr>
 <%
     }
 %>
 </table>
 <%
     st.close();
     con.close();
 %>

jdbcDelete.jsp

<% Integer dlt =(Integer)request.getAttribute("id1");
    ResultSet rs=null;
    Statement st=null;

    rs = st.executeQuery("delete from reg where id='"+dlt+"'");
    response.sendRedirect("jdbcData.jsp");
%>

2 个答案:

答案 0 :(得分:2)

您的代码无法正常运行的原因有多种。

  1. jdbcDelete.jsp 中,没有连接对象存在,因此您需要先建立连接

    <% 
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");
        Statement st = con.createStatement();
    %>
    
  2. 您正在使用request.getAttribute("id1");获取ID而您尚未在页面jdbcData.jsp中设置任何属性,因此您将获得null。您需要使用request.getParameter("id1");request.getParameter("id1");始终返回String,因此您需要将String解析为int。要做到这一点

    int dlt = Integer.parseInt(request.getParameter("id1"));
    
  3. 您正在执行executeQuery,并返回ResultSet

  4.   

    执行给定的SQL语句,该语句返回单个ResultSet   对象

    在这里,您需要使用executeUpdate来执行DML之类的INSERT, UPDATE AND DELETE命令,并返回int

    int i = st.executeUpdate("delete from student where studentid="+dlt);
    

    所以最后你 jdbcDelete.jsp 看起来像:

    <%@ page import="java.sql.*" %>
    <% 
        int dlt = Integer.parseInt(request.getParameter("id1"));
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");
    
        Statement st = con.createStatement();;  
    
        int i = st.executeUpdate("delete from student where studentid="+dlt);
        if (i != 0) {
            response.sendRedirect("jdbcData.jsp");
        } else {
            out.print("Data not deleted successfully");
        }
    %>
    

    建议:在JSP中使用java代码而不是servlets,使用preparedstatement是不好的做法,但是随着时间的推移你会学习。

    希望这会有所帮助。

答案 1 :(得分:0)

您可以像这样重写代码,

<% Integer dlt =(Integer)request.getAttribute("id1");
ResultSet rs=null;
Statement st=null;

PreparedStatement ps=con.prepareStatement("delete from reg where id=?")
ps.setInt(1,dlt);
ps.executeUpdate();

response.sendRedirect("jdbcData.jsp");
%>

注意: - 对于数据库操作,您可以编写服务或DAO 请通过MVC架构