返回受 Java 中 SQL UPDATE 语句影响的行数
我正在使用 MySQL 数据库并通过 Java 访问它。
PreparedStatement prep1 = this.connection.prepareStatement(
"UPDATE user_table
SET Level = 'Super'
WHERE Username = ?");
prep1.setString(1, username);
上面的更新语句工作正常,但是我想获取受此语句影响的行数。请问这可能吗?
I'm using a MySQL database and accessing it through Java.
PreparedStatement prep1 = this.connection.prepareStatement(
"UPDATE user_table
SET Level = 'Super'
WHERE Username = ?");
prep1.setString(1, username);
The update statement above works fine however I'd like to get the number of rows affected with this statement. Is this possible please?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Statement.executeUpdate()
或execute()
后跟getUpdateCount()
将返回匹配的行数,根据 JDBC 规范,未更新。如果您想要更新的计数,可以将useAffectedRows=true
指定为 非标准 URL 选项。更多信息请参见此处。Statement.executeUpdate()
orexecute()
followed bygetUpdateCount()
will return the number of rows matched, not updated, according to the JDBC spec. If you want the updated count, you can specifyuseAffectedRows=true
as a non-standard URL option. More information is available here.调用 executeUpdate()<你的PreparedStatement上的/a>应该返回一个int,即更新记录的数量。
Calling executeUpdate() on your PreparedStatement should return an int, the number of updated records.
首先,使用以下构造函数准备“PreparedStatement”对象:
然后,将参数设置为“pStmt”。在这种情况下:
最后,执行Update并获取受影响的行作为整数
First of all, prepare the 'PreparedStatement' object using below constructor:
Then, set your argument to 'pStmt'. In this case:
Finally, executeUpdate and get affected rows as an integer
现在看看另一个类似的情况,如果确实发生了变化,我只想做额外的工作,我认为最平台中立的方法是更改查询以排除设置字段匹配的情况:
Looking at this just now for another similar situation, where I only want to do additional work if something really changed, I think the most platform neutral way to do it would be to alter the query to exclude the case where the set fields match:
可以使用 SQL%ROWCOUNT (对于 ORACLE) 或 @@ROWCOUNT(对于 SQL SERVER) 返回受 SQL 更新影响的行数
注意:为了返回更新、删除等的行数。我们必须使用 OUT存储过程中的参数将存储更新、删除的行数等。
要获取更新、删除的行数等。我们必须使用
Java 中的 registerOutParameter 方法
将更新或删除的行数等存储到其中之一
存储过程中的 OUT 参数我们必须设置它的类型
在执行命令之前在我们的脚本中添加参数。 (如果是
更新或删除它将是数字)
命令执行后,存储更新或删除的值
行放入变量(可以是新变量或变量
通过调用该参数的索引可在类等中使用...)
(例如:A=cs.getInt(3) 如果存储过程中的 OUT 参数是
第二个参数)
现在,该变量的值为已更新或已删除的行
(ieA=10)
存储过程示例
java 脚本示例
注意:executeUpdate() 不返回更新或删除的行数。它只是返回0或1。
The number of rows affected by SQL Update can be returned using SQL%ROWCOUNT (For ORACLE) or @@ROWCOUNT(FOR SQL SERVER)
Note: In order to return the number of rows updated, deleted, etc.. we have to use OUT Parameter in Stored Procedure which will store the number of rows updated,deleted etc..
To get the number of rows updated,deleted etc.. we have to use
registerOutParameter method in Java
To store the number of rows updated or deleted etc.. into one of the
OUT parameter in stored procedure we have to set the type of that
parameter in our script before executing the command. (In case of
Update or delete it will be NUMERIC)
Once the command is executed, store the value of updated or deleted
rows into the variable (It can be new variable or variables
available in class etc..) by calling the index of that parameter
(for ex: A=cs.getInt(3) if the OUT parameter in stored procedure is
2nd parameter)
Now, the variable has the value of Updated or deleted rows
(i.e.A=10)
Example for Stored porcedure
Example for java script
Note: executeUpdate() doesn't return the number of rows updated or deleted. It just returns 0 or 1.
当您运行查询时会返回该数字:
That number is returned when you run the query:
如果需要知道有多少行会受到影响而不执行它,则必须首先运行 SELECT 语句。
If it is necessary to know how many rows will be affected without executing it, you will have to run a SELECT statement first.