如何从jsp页面删除数据库记录?

时间:2011-09-15 18:32:16

标签: java sql jsp jdbc

以下代码是我项目的一部分,此代码的输出是我获取数据库中所有帖子的标题和所有企业前面的删除超链接。当我单击删除相应的标题时,应该从jsp页面中删除它。如何为此编写代码?

<label><h3>Post published:</h3></label>
      <%
               rs = stmt.executeQuery("select title from Postdata");
       %>

                <table id="rounded-corner" summary="all posts">

                    <tbody>
                        <% while (rs.next()) {%>
                        <tr>
                            <td>
                                <%=rs.getString(1)%>
                            </td>
                            <td>

                                <a href><%=""%>Delete</a>
                            </td>
                        </tr>
                        <%}%>
                    </tbody>
                </table>

Screen shot of this code

3 个答案:

答案 0 :(得分:4)

首先,你真的想在JSP文件中使用JSTL而不是'raw'java。 而且,就像之前提到的那位评论者一样,你会提出这个问题 现在在servlet / controller中的逻辑。

如果你真的喜欢用jsp做这个,代码看起来应该是这样的(使用jstl):

<sql:setDataSource var="ds" ... />
<c:set var="title" value="${param['title']}"/>

<sql:update dataSource="${ds}">
   DELETE FROM Postdata where title = ?
   <sql:param value="${title}" />
</sql:update>

您创建链接的位置如下:

<td><a href="?title=[title to remove]">Delete</a></td>

答案 1 :(得分:4)

创建一个POST表单,其中记录ID为隐藏输入值和提交按钮。我假设您的表格中有id列,并且您也选择了它。

<form action="delete" method="post">
    <input type="hidden" name="id" value="<%=rs.getLong("id")%>" />
    <input type="submit" value="Delete" />
</form>

在servlet(或JSP中,如果你真的需要它),只需将ID作为请求参数获取

String id = request.getParameter("id");

然后做你的JDBC事情。

preparedStatement = connection.prepareStatement("DELETE FROM PostData WHERE id = ?");
preparedStatement.setLong(1, Long.valueOf(id));
preparedStatement.executeUpdate();

对于具体问题

无关,将Java代码放在JSP文件中被认为是一种不好的做法,确定它是否是数据库交互代码。我建议花一些时间学习servlet。

另见:

答案 2 :(得分:2)

执行此操作的理想方法是将所有逻辑移动到Servlet。我建议不要使用下面提到的这种方法,原因很多,您将获得更多经验。但是现在让我们假设您将仅使用JSP。有很多方法可以做到这一点,但这是其中一种方式。

这个方法使用两个JSPS,第一个JSP来显示记录。第二个JSP是一个处理JSP,它将为您执行删除。

下面详细介绍。

第一个JSP将显示记录。 单击“删除”时将调用第二个JSP。

第二个JSP将删除记录,然后重定向回第一个JSP。这是一种非常低效的方法,不建议这样做。但它快速而又脏,可以节省您创建Servlet,Java文件等的时间。

JSP1.jsp
将与您发布的代码相同。也检索记录的主键。这将用于标识需要删除的记录。 该id将作为参数传递给第二个JSP。

<%
      rs = stmt.executeQuery("select primary_key_id, title from Postdata");
%>
  <table id="rounded-corner" summary="all posts">

     <tbody>
        <% while (rs.next()) {
             String primaryKey = rs.getString(1);
        %>
         <tr>
             <td>
                <%=rs.getString(2)%>
             </td>
             <td>

                 <a href ="JSP2.jsp?deleteid=<%=primaryKey%>">Delete</a>
              </td>
          </tr>
          <%}%>

        </tbody>
     </table>

<强> JSP2.jsp
从请求中检索参数。然后对该id执行Delete查询。 然后重定向回JSP1。

<%
    String recordToDelete = request.getParameter("deleteid");

    // Use PreparedStatements here instead of Statment
    rs = stmt.executeQuery("delete from Postdata where primary_key_id="+ recordToDelete );

     response.sendRedirect("JSP1.jsp"); // redirect to JSP one, which will again reload.
%>

不建议使用此方法,但您可以了解需要执行的操作。