计算在 java 代码中传递给 MySql 的多个查询中受影响的行数



我会计算受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

  1. 检查返回的内容select * from Activity where ActivityName=?

  2. 检查返回的内容select ... where ... (select ...)

在评论中解释您的目标之后,还有其他解决方案可以添加尚不存在的值。

  1. 定义列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是否已经存在?因为如果有许多来自同一用户或许多其他用户并行的请求,则在检查和插入新值之间的时间内,其他一些请求可以插入此值,并且会出现主键冲突异常。这就是为什么你需要尝试/抓住任何方式。这就是为什么在没有任何检查的情况下插入并使用正确的尝试/捕获。

相关内容

  • 没有找到相关文章

最新更新