gpt4 book ai didi

java - 使用 JDBC 批量插入带有外键的多个表

转载 作者:行者123 更新时间:2023-12-01 18:08:45 24 4
gpt4 key购买 nike

我正在编写一个方法,该方法接收树结构并将其插入数据库,其中每个分支都是另一个数据库表。例如:

tree = {
"_id": "111",
"field1": "",
"field2": "",
"field3": {
"_id": "333",
"_parent_id": "111",
"field3_1": "",
"field3_2": "",
"field3_3": [
{
"_id": "1",
"_parent_id": "333",
"field3_3_1": ""
},
{
"_id": "2",
"_parent_id": "333",
"field3_3_1": ""
},
{
"_id": "3",
"_parent_id": "333",
"field3_3_1": ""
}
]
}
}

应对应于 3 个表:tree、field3 和 field3_3 - 它们在 _id 和 _parent_id 上有关系。每个分支可以是单个值、表或对象,基本上树是对应于 PostgreSQL 数据库中的某些数据结构的动态结构。我正在使用 jdbc 将数据插入数据库。当用户可能提供具有多个分支或多个分支值的大树时,插入此类数据的最佳方法是什么?我正在考虑这样的声明:

                 with first_insert as(
insert into sample(firstname, lastname)
values('fai55', 'shaggk')
RETURNING id
),

second_insert as(
insert into sample1(id, adddetails)
values
((select id from first_insert), 'ss')
RETURNING user_id
)

但是,如果内部插入适用于大批量记录(field3_3 将为每个数据行包含 100k 条记录),则会出现问题。

我已经使用PreparedStatement和executeBatch()实现了在单个数据库级别接受表和插入的方法,并且效果很好。有类似这种方法的东西可以用于树吗?

最佳答案

如果树是动态结构,我认为你必须将收到的 json 解析为可以在 Java 中工作的内容。

这样的事情可以使用 JSONObject 来实现。假设您在 String data 中序列化了传入的 json。然后你可以使用:

JSONObject dataJson = new JSONObject(data);

现在您可以在 Java 中使用此树结构。您可以使用 dataJson.toString() 将其序列化回来或创建自定义序列化程序。

如果问题是插入大小,您可以循环 dataJson 并将其拆分为合理的 block 。例如,您可以使用这样的东西

        JSONArray jsonArr = dataJson.getJSONArray("field3");
JSONArray dataAccumJsonArr = new JSONArray();
for (int i = 0; i < jsonArr.length(); i++) {
dataAccumJsonArr.put(jsonArr.get(i));
if (dataAccum.length() > 999) {
doInsert(dataAccumJsonArr);
dataAccumJsonArr = new JSONArray();
}
}
doInsert(dataAccumJsonArr);

关于java - 使用 JDBC 批量插入带有外键的多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60506989/

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