gpt4 book ai didi

JavaPreparedStatement带外键的多批量插入

转载 作者:行者123 更新时间:2023-11-29 22:38:46 25 4
gpt4 key购买 nike

我有一个 Java 应用程序,正在尝试对 MySQL 数据库进行一系列批量插入。然而,我的许多表都是通过外键链接的。所以我不知道要使用的外键的值,因为它们是在上一批中生成的。

<小时/>

例如,以这两个表为例:
家长
id
名称

child
id
Parent_id (parent.id 所需的外键)
名称

<小时/>

我知道如何在不使用批处理的情况下导入这些:

//already initialized variables: Connection connection, List<ParentObject> parentObjects

ResultSet rs = null;
PreparedStatement psParent = null;
PreparedStatement psChild = null;
for(ParentObject parent: parentObjects){
psParent = connection.prepareStatement("INSERT INTO product (name) VALUES (?)", PreparedStatement.RETURN_GENERATED_KEYS);
psParent.setString(1, parent.getName());
psParent.executeUpdate();

int parentId = 0;
rs = psParent.getGeneratedKeys();
if (rs.next())
parentId = rs.getInt(1);

rs.close();
psParent.close();

for(ChildObject child : parent.getChildren()){
psChild = connection.prepareStatement("INSERT INTO child (parent_id, name) VALUES (?,?)");
psChild.setInt(1, parentId);
psChild.setString(2, child.getName());
psChild.executeUpdate();
psChild.close();
}
}

现在我尝试使用批处理:

PreparedStatement psParent = connection.prepareStatement("INSERT INTO product (name) VALUES (?)");
PreparedStatement psChild = connection.prepareStatement("INSERT INTO child (parent_id, name) VALUES (?,?)");
for(ParentObject parent: parentObjects){
psParent.setString(1, parent.getName());
psParent.addBatch();

for(ChildObject child : parent.getChildren()){
psChild.setInt(1, I_DONT_KNOW_HOW_TO_GET_THIS_ID_WHICH_HASNT_BEEN_INSERTED_YET);
psChild.setString(2, parent.getName());
psChild.addBatch();
}
}

psParent.executeBatch();
psParent.close();
psChild.executeBatch();
psChild.close();

我使用的实际数据结构比上面的要复杂得多,但它说明了基本问题。我将如何使用批处理来完成上述操作?我遇到的问题是,如果不先知道要使用的parent_id 外键,则无法插入子对象。

我在其他地方寻找答案,但找不到任何解决此问题的方法。我读到了一些有关使用存储过程的内容(如果可能的话,我想避免使用存储过程)。效率在这里很重要,因为我正在处理可能数百万条记录。我很欣赏任何人可能有的见解。

最佳答案

不要认为生成的主键是可能的。如果您的应用程序只是数据库的一个客户端,也许您可​​以自己计算主键并直接在准备好的语句中传递它们。

关于JavaPreparedStatement带外键的多批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451286/

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