oracle Jdbc 更新语句返回零

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于oracle Jdbc 更新语句返回零的主要内容,如果未能解决你的问题,请参考以下文章

廖雪峰Java15JDBC编程-3JDBC接口-2JDBC更新

JDBC getUpdateCount 在 SQL Server 中返回 0,但更新了 1 行

oracle 多表更新update,返回多行

具有组功能的 Oracle 更新语句

JDBC增加更新删除数据

java jdbc 删除数据库表中一列后不能用SQL语句在更新和查询表中其他数据了