簡體   English   中英

如何在 Java 中成功地從書中刪除標簽?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM