如果我们有一个包含10行的表,并且我们执行此查询两次,则第二次得到错误的受影响行数.
Statement st = open();
st.executeUpdate("UPDATE `tickets` SET price=1000"); // return 10
st.executeUpdate("UPDATE `tickets` SET price=1000"); // return 10
Run Code Online (Sandbox Code Playgroud)
显然这是不正确的,因为在第一个查询中,所有行的价格都更新为1000,而在第二个查询中没有任何实际更改,但它再次返回10!
如何获取实际更新的行数?
JDBC规范显然要求驱动程序executeUpdate()返回UPDATE语句找到的行数,而不是实际影响的行数.
要让MySQL Connector/J返回实际更改的行数,您可以将属性添加useAffectedRows=true到连接URL,尽管文档确实警告它是
不符合JDBC标准,将破坏大多数依赖于"找到"行和DML语句"受影响行"的应用程序