【问题标题】:How to delete selected data from database using jsp?如何使用jsp从数据库中删除选定的数据?
【发布时间】:2015-07-23 18:18:49
【问题描述】:

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");
%>

【问题讨论】:

  • 请改用PreparedStatements。您的DELETE 容易受到 SQL 注入;当有人通过 id ' OR 1=1 -- 传递时,整个表将被删除。
  • 嘿,谢谢你的建议,但我是学习者。准备好的语句将在下一个 JDBC 讲座中向我们介绍。今天的讲座将连接 jdbc 和 regestration 表格。但我想了解更多,所以我决定这样做并出错。如果有人给我解决方案,我将非常感谢@mick Mnemonic

标签: mysql jsp jdbc sql-delete


【解决方案1】:

您的代码无法正常工作的原因有很多。

  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

执行给定的 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,但随着时间的推移,你会学习。

希望这会有所帮助。

【讨论】:

  • 非常感谢兄弟。我也想把所有的事情都做到完美,但要成为第一名,中间有 99 人要击败,所以我会尽我最大的努力尽快拿出和你一样的知识。再次感谢这个。它绝对有效。我希望我能有你这样的朋友,这样我就可以学得很快。
【解决方案2】:

你可以像这样重写你的代码,

<% 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");
%>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2014-11-05
    • 1970-01-01
    • 2012-05-30
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多