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

调用Statement.execute()执行DELETE操作返回false但数据已被删除问题

问题核心原因

你对JDBC中PreparedStatement.execute()方法的返回值规则存在概念误解:

  • execute()方法的返回值仅用来标识执行结果的类型:返回true代表执行的是查询类语句,返回结果是ResultSet对象;返回false代表执行的是DML(INSERT/UPDATE/DELETE)、DDL语句,或者没有返回结果。
  • DELETE属于DML语句,不管有没有匹配到行、有没有成功删除数据,只要语句正常执行没有抛出异常,execute()都会返回false。你把false作为"未找到行"的判断条件,才会出现数据删除成功却弹出错误提示的问题。
修正方案

如果要判断DELETE操作是否实际匹配并删除了行,需要改用executeUpdate()方法,该方法会返回int类型的受影响行数,判断该值大于0即可确认删除成功:

sql = "DELETE FROM assignments WHERE assign_mark = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, d1);

// 获取删除操作实际影响的行数
int affectedRows = statement.executeUpdate();
if (affectedRows > 0) {
    new ViewDatabase(user, name, pswrd);
    System.out.println("ASSIGN - ASSIGN_MARK UPDATE SUCCESSFUL!");
    frame.setVisible(false);
} else {
    JOptionPane.showMessageDialog(null, "Cannot find row!",
              "ERROR", JOptionPane.ERROR_MESSAGE);
}

statement.close();
connection.close();

内容的提问来源于stack exchange,提问作者leah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:39:03