JDBC getUpdateCount 在 SQL Server 中返回 0,但更新了 1 行
Posted
技术标签:
【中文标题】JDBC getUpdateCount 在 SQL Server 中返回 0,但更新了 1 行【英文标题】:JDBC getUpdateCount is returning 0, but 1 row is updated, in SQL Server 【发布时间】:2014-03-12 12:08:02 【问题描述】:有人见过这个吗?我正在使用 MS SQL Server 2008,并且我已经尝试使用两种不同的 JDBC 驱动程序(jtds 和 Microsoft 的)。我运行了一个简单的语句来更新一行,它确实更新了它,但是getUpdateCount
返回 0。如果我尝试对不同的表执行此操作,它会按预期返回 1。这是关于这张桌子的东西。
PreparedStatement ps =
conn.prepareStatement("select count(*) from foo_users where user_id = 1")
ResultSet rs = ps.executeQuery();
rs.next()
println(" count(*) is " + rs.getInt(1)); // Prints 1
ps = conn.prepareStatement("update foo_users set is_admin = 1 where user_id = 1")
ps.execute()
int count = ps.getUpdateCount()
println(" update count is " + count) // Prints 0. WTF.
这是什么原因造成的?
根据评论更新: 是的,executeUpdate
有效。但我问这个问题是因为我使用了一个名为jOOQ 的查询库,它返回了不正确的结果,因为它调用了execute
和getUpdateCount
。我最初没有考虑这个问题,因为我认为这不是图书馆的错。
【问题讨论】:
有什么理由不只是使用int count = executeUpdate();
开始,而不是调用execute()
?
是的。我实际上正在使用另一个调用execute()
的库(jOOQ)。也许我也应该在他们的邮件列表上发帖。正如您所建议的,executeUpdate
工作正常。
你真的检查过execute()
返回的值吗?只有当它是 false
时,getUpdateCount()
才会返回更新计数。否则,您首先需要致电getMoreResults()
(可能多次)。现在我希望这个特定语句的更新计数。如果execute
返回true
,getUpdateCount()
应该返回-1
,但你永远不知道。
运行此更新时是否会触发任何触发器?例如。可能会触发raise an error?
如果连接设置了 SET NOCOUNT ON,SQL server 不会返回受语句影响的行
【参考方案1】:
您的更新语句需要“executeUpdate”。
executeUpdate 返回行数。如果没有返回记录集,“执行”只会返回 false,而 UPDATE 则不会。
【讨论】:
您阅读了我的整个问题吗?我解释了我不询问executeUpdate
的具体原因。根据 Java 文档,execute
和 getUpdateCount
应该可以工作。以上是关于JDBC getUpdateCount 在 SQL Server 中返回 0,但更新了 1 行的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLFeatureNotSupportedException:方法 org.postgresql.jdbc4.Jdbc4Connection.isValid(int) 尚未实现。在