我会计算受java中作为预准备语句传递给MySql引擎的查询影响的行数。
给定传递给预准备语句的以下示例查询,我需要能够计算受所有查询影响的行总数。
//insert data into table X ;
//update records of table X ;
查询由";"分隔,这是MySql语法的一部分,用于支持对特定PreparedStatement对象的多个CRUD操作。 似乎当调用"executeUpdate(("方法时,只返回受第一个查询影响的行数,即插入到表中。 我是否错过了我应该提供的内容,以获取该查询中受影响的总行数?
这是我正在处理的示例真实代码:
insert into Activity
select * from (select ?, ?, ?, ?) as temp
where not exists(select * from Activity where ActivityName=?);
update Activity
set EmployeeeName=?, DepartmentName=?, roleId=?
where ActivityName=?;
我希望最小值为 1 作为输出,而获得 0
。-
检查返回的内容
select * from Activity where ActivityName=?
。 -
检查返回的内容
select ... where ... (select ...)
。
在评论中解释您的目标之后,还有其他解决方案可以添加尚不存在的值。
- 定义列
ActivityName
是主键(如果不这样做是(。然后什么都不要检查,不要做任何select
,只做insert
:
try {
// statement to insert like
// insert into Activity (ActivityName, EmployeeeName, DepartmentName, roleId)
// values (?, ?, ?, ?)
} catch ... {
// If the exception is caused by primary key violation,
// then such ActivityName already existed and we can ignore this exception
}
为什么不先检查这样的ActvityName是否已经存在?因为如果有许多来自同一用户或许多其他用户并行的请求,则在检查和插入新值之间的时间内,其他一些请求可以插入此值,并且会出现主键冲突异常。这就是为什么你需要尝试/抓住任何方式。这就是为什么在没有任何检查的情况下插入并使用正确的尝试/捕获。