如何在Java中成功移除书籍标签?PubHub项目移除标签异常问题咨询
问题根因
你的代码存在3处核心逻辑错误,直接导致删除标签功能异常:
- TagDAOImpl的删除SQL写法错误:仅设置了1个占位符,却传入了2个参数,同时WHERE条件缺少ISBN匹配规则,会触发SQL执行异常,就算能正常运行也会误删所有书籍的同名标签。
- TagDAOImpl的参数顺序和SQL占位符不匹配:原SQL仅有的占位符对应标签字段,你第一个参数却传入了ISBN值,字段完全对应不上。
- Servlet参数名和JSP表单参数名不匹配:JSP里提交标签值的隐藏域name是
tag,但Servlet中却使用book_tags作为参数名取值,永远只能拿到null,无法匹配要删除的标签。
修复代码
1. 修复后的TagDAOImpl#RemoveTag方法
@Override public boolean RemoveTag(Tag tag) { try { connection=DAOUtilities.getConnection(); // 修正SQL:同时匹配ISBN和标签,两个占位符对应两个参数 String Sql = "DELETE From book_tags WHERE isbn13=? AND tag=?"; stmt = connection.prepareStatement(Sql); // 按顺序传入参数:第一个是ISBN,第二个是标签名 stmt.setString(1, tag.getIsbn13()); stmt.setString(2, tag.getTag()); return stmt.executeUpdate() != 0; } catch (SQLException e) { e.printStackTrace(); return false; } finally { closeResources(); } }
2. 修复后的RemoveTagServlet取值逻辑
仅需要修改Servlet中获取标签值的一行代码,把参数名改成和JSP表单一致的tag即可:
tag.setTag(request.getParameter("tag"));
内容的提问来源于stack exchange,提问作者Mathewos Mekuria
相关产品推荐
相关产品推荐

