Как я могу удалить записи базы данных со страницы JSP? - PullRequest
2 голосов
/ 15 сентября 2011

Следующий код является частью моего проекта, и вывод этого кода заключается в том, что я получаю все заголовки сообщений в базе данных и гиперссылку на удаление перед всеми записями.Когда я нажимаю удалить для соответствующего заголовка, он должен быть удален со страницы 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 ]

4 голосов
/ 16 сентября 2011

Создайте форму POST с идентификатором записи в качестве скрытого значения ввода и кнопкой отправки. Я предполагаю, что в вашей таблице есть столбец id, и вы также выбрали его.

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

В сервлете (или JSP, если он вам действительно нужен) просто захватите идентификатор как параметр запроса

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

Тогда просто делай свое дело в JDBC.

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

Не связано с конкретной проблемой, размещение Java-кода в файле JSP считается плохой практикой, наверняка, это код взаимодействия с базой данных. Предлагаю потратить некоторое время на изучение сервлетов.

Смотри также:

4 голосов
/ 15 сентября 2011

Во-первых, вы действительно хотите использовать JSTL вместо «сырых» java в файлах JSP. И, как предыдущий комментатор уже упоминал, вы бы логика в настоящее время в сервлете / контроллере.

Если вам действительно нравится делать это с 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>
2 голосов
/ 16 сентября 2011

Идеальный способ сделать это - переместить всю логику в сервлет. Этот метод, который я упоминаю ниже, не рекомендуется по многим причинам, которым вы научитесь по мере накопления опыта. Однако сейчас давайте предположим, что вы собираетесь использовать только JSP. Есть много способов сделать это, но это один из способов.

Этот метод использует два JSPS, первый JSP для отображения записей. Второй JSP - это обрабатывающий JSP, который сделает за вас удаление.

Подробнее в деталях ниже.

Первый JSP будет отображать записи. Второй JSP вызывается, когда вы нажимаете «удалить».

Второй JSP удалит запись и затем перенаправит обратно на первый JSP. Это очень неэффективный способ сделать это и не рекомендуется. Но это быстро и грязно и сэкономит ваше время от создания сервлетов, файлов Java и т. Д.

JSP1.jsp
будет иметь тот же код, что и вы. получить первичный ключ записи. Это будет использоваться для идентификации записи, которую необходимо удалить. Этот идентификатор будет передан в качестве параметра во второй 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
получить параметр из запроса. Затем выполните запрос 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.
%>

Этот метод не рекомендуется, но вы понимаете, что нужно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...