有人见过这个吗?我正在使用 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
。我最初没有考虑这个问题,因为我认为这不是图书馆的错。
您的更新语句需要“executeUpdate”。
executeUpdate 返回行计数。如果没有返回记录集,“execute”只会返回 false,而 UPDATE 则不会返回。
答案有点晚了,但这适用于带有最新 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.