gpt4 book ai didi

java - 使用 executeBatch() 插入列表时返回数据

转载 作者:行者123 更新时间:2023-11-29 13:11:42 27 4
gpt4 key购买 nike

插入数据列表时,我必须访问自动生成的数据(id、created、last_modified ...)。因为列表可能很大,所以我使用 statement.executeBatch() 将所有内容添加到一个包中。但是,这样我就失去了利用 returning 语句的机会。

我目前正在执行以下操作以获取数据:

public boolean store(Connection connection, List<WorkPlace> list) throws SQLException {
String query =
"insert into work_places (merchant_id, name, description) values (?, ?, ?)";

try(PreparedStatement statement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS)) {
for(WorkPlace workPlace: list) {
statement.setLong(1, workPlace.getMerchantId());
statement.setString(2, workPlace.getName());
statement.setString(3, workPlace.getDescription());

statement.addBatch();
}

statement.executeBatch();

try(ResultSet rs = statement.getGeneratedKeys()) {
List<Long> ids = new ArrayList<>();

while (rs.next()) {
ids.add(rs.getLong(1));
}

query =
"select * from work_places where id = any (?)";

try(PreparedStatement statement1 = connection.prepareStatement(query)) {
statement1.setArray(1, connection.createArrayOf("integer", ids.toArray()));

try(ResultSet rs1 = statement1.executeQuery()) {
list.clear();

while (rs1.next()) {
list.add(getWorkPlace(rs1));
}
}
}
}
}

return true;
}

你有兴趣吗,有没有更好的方法来实现我所需要的?

最佳答案

PostgreSQL JDBC 驱动程序中生成的键实现使用RETURNING *,它将返回表中的所有列。因此,如果您可以在执行批处理后以这种方式检索生成的 ID,那么您还应该能够从同一 getGeneratedKeys 结果集中检索其他列。

关于java - 使用 executeBatch() 插入列表时返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53828193/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com