You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 17:15:00