[英]How can I delete database records from a jsp page?
以下代碼是我的項目的一部分,此代碼的輸出是我獲得數據庫中所有帖子的標題和所有企業前面的刪除超鏈接。 當我單擊刪除相應的標題時,應該從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>
首先,你真的想在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>
創建一個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。
執行此操作的理想方法是將所有邏輯移動到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.
%>
不建議使用此方法,但您可以了解需要執行的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.