【问题标题】:oracle Jdbc update statement return zerooracle Jdbc 更新语句返回零
【发布时间】:2012-03-28 13:44:06
【问题描述】:

这是关于使用 JDBC 的 sql 更新语句。实际上,我正在调查我们遇到的一些问题,所有这些问题都挂在更新语句在尝试更新某些行时返回零的点上。

现在说清楚,特定行更新语句正在尝试更新,表中确实存在。因此不可能找到未找到记录,因此零更新。

提到这一点,我的问题是,您是否看到或者他们是否有任何其他可能性可以通过更新返回零。我正在使用 oracle jdbc 驱动程序。 oracle jdbc 也提到了更新语句可以返回零的任何情况,而不是找不到记录。

非常感谢, 阿米尔·马维亚

【问题讨论】:

  • “所以不可能找不到记录” - 这通常是之前刚刚所说的,“啊,这就是为什么记录没有”找不到..." 请显示一些代码。
  • 我受到服务器限制,不能共享代码,尽管我可以说它非常普通,获取连接,创建准备好的语句并执行它。希望你能理解我必须尊重的这种约束。
  • 不是真的,因为你没有提供任何迹象表明你是如何检查它真的找到一行的。例如,如果您将UPDATE 更改为SELECT 并删除新值(但不要触摸查询),您那么 看到它工作了吗?根据我的经验,这可能是一个与查询一样平凡的错字......
  • 打死马(问题两年了)但我刚刚经历过,找到了可能的解释:stackoverflow.com/a/19543016

标签: java sql oracle jdbc


【解决方案1】:

执行更新

int executeUpdate() 抛出 SQLException

执行此 PreparedStatement 对象中的 SQL 语句,该语句必须是 SQL 数据操作语言 (DML) 语句,例如 INSERT、UPDATE 或 DELETE;或不返回任何内容的 SQL 语句,例如 DDL 语句。

返回: (1) SQL 数据操作语言 (DML) 语句的行数或 (2) 0 用于不返回任何内容的 SQL 语句 抛出: SQLException - 如果发生数据库访问错误;在关闭的 PreparedStatement 或 SQL 语句返回 ResultSet 对象上调用此方法

只是说文档指定:

"请注意,当 executeUpdate 的返回值为 0 时,可能意味着以下两种情况之一:

执行的语句是影响零行的更新语句。 执行的语句是 DDL 语句。”

【讨论】:

    【解决方案2】:

    抱歉,我还不知道如何发表评论,所以...

    来自甲骨文:

    http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

    请注意,当 executeUpdate 的返回值为 0 时,它可能意味着以下两种情况之一:

    * The statement executed was an update statement that affected zero rows.
    * The statement executed was a DDL statement.
    

    所以看起来 Update 语句可能会以某种你没有预料到的方式被破坏。我认为这是考虑到没有抛出异常的情况。如果这是可重复的,您应该能够监视在服务器端发送的 SQL 并查看您缺少什么。

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2016-11-29
      • 2020-11-12
      • 1970-01-01
      相关资源
      最近更新 更多