【问题标题】:Get boolean value from JDBC从 JDBC 获取布尔值
【发布时间】:2017-04-07 06:41:08
【问题描述】:

所以我使用 jdbc 并在更新我的 db 表后尝试从 execute(sql) 方法获取布尔返回值。以下是代码:

try{
    Statement stmt = conn.createStatement();
    String sql = "update emp_earnings set salary = 6400 where lower(name)= 'bob'";
    Boolean result = stmt.execute(sql);
    System.out.println("rows affected (Y/N): " + result );
}catch(Exception e){
    System.out.println("some error in second");
    e.printStackTrace();

}

当我检查我的数据库表时,工资已更新,但 execute(sql) 已返回“假”。 尽管execute() 正在工作,但我得到的输出为“假”。 我检查了网络,它说如果工作它应该返回“真”。 executeUpdate() 当我在相同的代码中使用它而不是 execute() 并提供所需的输出时,会返回“受影响的行数”。 我做错了什么?

【问题讨论】:

  • 找到此类问题答案的最佳位置是JDBC Database Access 教程和JavaDocs
  • “我做错了什么?” 您没有阅读execute() 的文档,因为它说:返回 如果第一个结果是 ResultSet 对象,则为 true; 如果是更新计数则为 false 或没有结果。 --- 如果你想要更新计数,你应该调用executeUpdate()返回 [...] 行计数
  • 这和PL/SQLPL/SQL Developer有什么关系?
  • @William Robertson 我认为它也是一个数据库错误。因为我也在桌子上运行触发器。我认为某些东西可能会限制它。
  • 示例中没有PL/SQLPL/SQL Developer 不使用JDBC。我已将标签更新为 Oracle 和 SQL。

标签: java sql oracle jdbc


【解决方案1】:

来自documentation

boolean execute(String sql) 抛出 SQLException

返回:

如果第一个结果是 ResultSet 对象,则为真;如果它是一个 false 更新计数或没有结果

在这里,您正在执行方法中运行更新命令,该命令将返回更新计数。所以它会为该更新计数返回 false。

【讨论】:

  • 谢谢萨钦。这回答了它!
【解决方案2】:

我认为您实际上想要执行int result = stmt.executeUpdate(sql);,它将返回受影响的行数,也就是说,如果更新没有更改任何行,则为 0。

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2012-02-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多