[英]How to successfully remove a tag from a book in Java?
我正在從事 PubHub 100 項目。 我面臨的一個問題是,當我按下按鈕從書中刪除標簽時,網頁會返回異常。 在這個項目的過程中,我使用了Java Development Kit,Eclipse編寫和運行java程序,Wildfly作為服務器連接PubHub網站,PostgreSQL訪問包含書籍的數據庫。 下面是來自 Tag DAO 和 Tag DAO 實現的代碼以及用於從書中刪除標簽的 servlet 和 JSP。
///Code from the Tag DAO
package examples.pubhub.dao;
import java.util.List;
import examples.pubhub.model.Book;
import examples.pubhub.model.Tag;
public interface TagDAO {
public List<Tag> getAllTags();
public List<Tag> getAllBooks();
public List<Tag> getTagsByBook(String isbn13);
public List<Book> getBooksByTag(String booktag);
public Tag getBooksByISBN(String isbn);
public boolean AddTag(Tag tag);
public boolean RemoveTag(Tag tag);
}
///Code with SQL statement to remove tag from "TagDAOImpl that Implements TagDAO"
@Override
public boolean RemoveTag(Tag tag) {
try {
connection=DAOUtilities.getConnection();
String Sql = "DELETE From book_tags WHERE tags=?";
stmt = connection.prepareStatement(Sql);
stmt.setString(1, tag.getIsbn13());
stmt.setString(2, tag.getTag());
if(stmt.executeUpdate() != 0)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
} finally {
closeResources();
}
}
///Servlet to remove the tag from the book.
package examples.pubhub.servlets;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import examples.pubhub.model.Tag;
import examples.pubhub.dao.TagDAO;
import examples.pubhub.utilities.DAOUtilities;
@WebServlet("/RemoveTag")
public class RemoveTagServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
boolean isSuccess = false;
String isbn13 = request.getParameter("isbn13");
Tag tag = new Tag();
tag.setIsbn13(isbn13);
tag.setTag(request.getParameter("book_tags"));
TagDAO dao = DAOUtilities.getTagDAO();
isSuccess = dao.RemoveTag(tag);
if(isSuccess) {
request.getSession().setAttribute("message", "Book Tag Successfully Removed.");
request.getSession().setAttribute("messageClass", "alert-success");
response.sendRedirect("ViewBookDetails?isbn13=" + isbn13);
} else {
request.getSession().setAttribute("message", "There was a problem updating this tag");
request.getSession().setAttribute("messageClass", "alert-danger");
request.getRequestDispatcher("bookDetails.jsp").forward(request, response);
}
}
}
//JSP Code to create a section where the user clicks to remove the tag from the book details.
<section>
<div class="container">
<h1><small>Tags</small></h1>
<table
class="table table-striped table-hover table-responsive pubhub-datatable">
<thead>
<tr>
<th>Tag</th>
<td></td>
</tr>
</thead>
<tbody>
<c:forEach var="tag" items="${tags}">
<tr>
<td><c:out value="${tag.tag}"/></td>
<td>
<form method="post" action="RemoveTag">
<input type="hidden" value="${tag.isbn13}" name="isbn13"/>
<input type="hidden" value="${tag.tag}" name="tag"/>
<button class="btn btn-danger popover-bookpub-removetag"
type="submit">Remove Tag</button>
</form>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</section>
我可以看到的一件事是,您有一個帶有參數的 SQL 查詢:
DELETE From book_tags WHERE tags=?
但是您要設置兩個參數的值:
stmt.setString(1, tag.getIsbn13());
stmt.setString(2, tag.getTag());
我認為您應該在查詢中使用 ISBN13。
更新:
查詢應該是:
從 book_tags 中刪除 isbn_13=? AND 標簽=?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.