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

问题描述 投票:0回答:2

有人见过这个吗?我正在使用 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
。我最初没有考虑这个问题,因为我认为这不是图书馆的错。

java sql-server sql-server-2008 jdbc jooq
2个回答
0
投票

您的更新语句需要“executeUpdate”。

executeUpdate 返回行计数。如果没有返回记录集,“execute”只会返回 false,而 UPDATE 则不会返回。


0
投票

答案有点晚了,但这适用于带有最新 ms jdbc 驱动程序 12.2 的 sql server 2022:

PreparedStatement ps = conn.prepareStatement("select count(*) from foo_users where user_id = 1");
ResultSet rs = ps.executeQuery();
rs.next();
System.out.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();
System.out.println(" update count is " + count);        // Prints 1.
© www.soinside.com 2019 - 2024. All rights reserved.