Java sql如何进行executeBatch()插入以返回布尔值
Posted
技术标签:
【中文标题】Java sql如何进行executeBatch()插入以返回布尔值【英文标题】:Java sql how to make executeBatch() insertion to return boolean 【发布时间】:2021-05-07 21:13:02 【问题描述】:假设我们有一个 Person 类,其中包含与其属性相关的 setter 和 getter:
private int age
private String name
private String address
private double weight //lbs
private double height //cm
然后是它们的列表:
Person person1 = new Person(18, "Jack Harrs", "55 Albridge St", 155.20, 167.53)
Person person2 = new Person(53, "Toby Canes", "59 Albridge St", 193.43, 179.11)
Person person3 = new Person(24, "Dwayne Right", "74 W Saint St", 183.22, 183.87)
Person person4 = new Person(33, "Shelby Johnson", "99 Broad St", 123.50, 158.30)
List<Person> personsList = new ArrayList<>();
personsList.add(person1);
personsList.add(person2);
personsList.add(person3);
personsList.add(person4);
目前我通过executeBatch()
插入:
Connection con = ...
PreparedStatement stmt = con.prepareStatement("INSERT INTO persons_table (AGE, NAME, ADDRESS,
WEIGHT, HEIGHT) VALUES (?, ?, ?, ?, ?)");
for( Person person : personsList )
stmt.setInt(1, person.getAge());
stmt.setString(2, person.getName());
stmt.setString(3, person.getAddress());
stmt.setDouble(4, person.getWeight());
stmt.setDouble(5, person.getHeight());
stmt.addBatch();
int[] results = stmt.executeBatch();
因此,int[] results
看起来像 [1,1,..],其中 1 表示成功,x 其他数字表示失败。但是,我想根据操作是否成功返回 true 或 false。我试过只在最后做一个return true
而没有初始化一个int[]
数组但是我不知道如何在代码中解释return false
的情况?
【问题讨论】:
你不能。它是一个定义的接口。如果操作没有“成功”,那是什么意思?引发异常? 【参考方案1】:听起来应该使用results
来确定是否所有批处理语句都成功。例如:
...
int[] results = stmt.executeBatch();
return isSuccess(results);
private void isSuccess(int[] batchUpdateResults)
Arrays.stream(batchUpdateResults).allMatch(updateCount -> updateCount == 1);
请注意,这要求所有批处理语句都更新了单个记录。如果任何批处理语句返回 1 以外的任何值,则将返回 false。所以成功的定义可能需要澄清一下。
此外,从示例代码中也不清楚如果抛出异常会发生什么。是否会在方法中捕获异常并返回false?
【讨论】:
对于 mysql 数据库,值 not = 1 的通常定义是什么? 我不确定您在问什么,但results
的每个元素都表示该特定查询的更新计数。【参考方案2】:
你可以试试这个:
try
stmt.executeBatch();
return true;
catch (SQLException e)
return false;
executeBatch()
将仅在批处理中的所有命令都成功时返回 int[]
,否则将抛出 SQLException
或 BatchUpdateException
(SQLException
的子类)。
Reference to docs
【讨论】:
以上是关于Java sql如何进行executeBatch()插入以返回布尔值的主要内容,如果未能解决你的问题,请参考以下文章
MyEclipse------executeBatch()使用方法
在executeBatch()之前如何检查Prepared Statement是不是有一些批次?
JDBC批量插入数据优化,使用addBatch和executeBatch
execute(),executeQuery(),executeUpdate()和executeBatch()的使用与区别