调用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
相关产品推荐
相关产品推荐

