gpt4 book ai didi

java - 插入时如何批量插入取决于准备批量的数据

转载 作者:行者123 更新时间:2023-12-01 10:03:15 24 4
gpt4 key购买 nike

我的 Java 应用程序从 CSV 文件中读取行并将其放入数据库 (Apache Derby)。我想实现批量插入,因为我要插入数千条记录,所以我希望提高性能。但是,如何插入数据取决于数据库中已有的数据,例如我想批量执行以下插入:

INSERT INTO user (name) VALUES (?);

但是,如果下面没有返回任何数据,我只会执行上面的操作:

SELECT * FROM user WHERE name='Tim';

如果我正在批处理插入,那么我的 SELECT 可能找不到最新的数据,因为它正在等待批处理。

任何人都可以找到解决方案吗?也许是缓存机制?

最佳答案

一个简单的选择是使批处理条目为 INSERT/SELECT 语句,这样只有在满足查询条件时才会发生插入。

这将是这样的:

Lists<String> usernames = new ArrayList<>();
//.... data in list assumed
for(String username: usernames) {
statement.addBatch("INSERT INTO USER(NAME) SELECT '" + username+ "' FROM USER WHERE NOT EXISTS(SELECT 1 FROM USER WHERE NAME = '" + username + "')");
}

这将使数据库处理检查插入的记录是否存在。数据库中已存在相应的语句将不会插入,并且返回计数将为 0。但无论如何您都不会关心它。

我很快用谷歌搜索发现 Derby 显然支持 INSERT/SELECT 功能。您可以在此处找到有关此语法的更多信息:https://db.apache.org/derby/docs/10.0/manuals/reference/sqlj40.html

关于java - 插入时如何批量插入取决于准备批量的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36651660/

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