Statement.execute() 即使进行了更改也返回 false

Statement.execute() returning false even though changes are made

我的这段代码在这里:

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

boolean rows = statement.execute();
if (rows == true) {
    new ViewDatabase(user, name, pswrd);
    System.out.println("ASSIGN - ASSIGN_MARK UPDATE SUCCESSFUL!");
    frame.setVisible(false);
} else if (rows == false) {
    JOptionPane.showMessageDialog(null, "Cannot find row!",
              "ERROR", JOptionPane.ERROR_MESSAGE);
}

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

在我输入 d1 的值(对应于我数据库中现有数据的正确列)后,我得到“找不到行!”价值。但是,当我检查我的数据库时,列名中带有 d1 的行已经消失了。我不确定我这里的 error/misunderstanding 概念是什么。

int numColsAffected = statement.executeUpdate();
if (numColsAffected > 0) {
   // Success
}
else {
   // Failure
}

可能是要走的路

execute() 调用 returns true 如果结果本来 returned 一个 ResultSet 对象;它 returns false 否则,即如果它不想 return 什么,或者更新计数。

对于几乎所有的意图和目的,这意味着 execute() returns true 用于 SELECT 语句和 false 用于其他所有内容,包括DELETEINSERTUPDATE 语句。

最重要的是,它意味着:永远不要调用那个方法,它完全没用。

executeUpdateexecuteQuery是你想要的。

--

编辑:正如 Mark 在非常有用的评论中指出的那样,这个答案不当诋毁 execute()。我们只是说 returned 布尔值有点奇怪,但这并不是 JDBC API 中唯一有点不直观的部分。该方法有其用途;这只是这个特定问题的正确方法。请阅读评论以获取更多详细信息:)