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
用于其他所有内容,包括DELETE
、INSERT
和 UPDATE
语句。
最重要的是,它意味着:永远不要调用那个方法,它完全没用。
executeUpdate
或executeQuery
是你想要的。
--
编辑:正如 Mark 在非常有用的评论中指出的那样,这个答案不当诋毁 execute()
。我们只是说 returned 布尔值有点奇怪,但这并不是 JDBC API 中唯一有点不直观的部分。该方法有其用途;这只是这个特定问题的正确方法。请阅读评论以获取更多详细信息:)
我的这段代码在这里:
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
用于其他所有内容,包括DELETE
、INSERT
和 UPDATE
语句。
最重要的是,它意味着:永远不要调用那个方法,它完全没用。
executeUpdate
或executeQuery
是你想要的。
--
编辑:正如 Mark 在非常有用的评论中指出的那样,这个答案不当诋毁 execute()
。我们只是说 returned 布尔值有点奇怪,但这并不是 JDBC API 中唯一有点不直观的部分。该方法有其用途;这只是这个特定问题的正确方法。请阅读评论以获取更多详细信息:)