在一个循环中批量插入不同的表
insert to different tables batche in one loop
我正在解析保存用户信息的 JSON 文件。我一一获取信息并构建一些 class es,例如 User,UserSettings。现在所有这些信息都应该插入到数据库中。
JSON 文件太大,可以有超过 500000 个用户。
要插入例如用户 class 信息,我使用以下代码:
String sql = "INSERT INTO USERS (name, city, phone) values (?,?,?)";
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
final int batchSize = 500;
int count = 0;
User user;
UserSettings userSettings;
for (loop JSON file here and get user info one by one)
{
user = parseUser();
userSettings = parseUserSettings();
ps.setSting(1,user.getName());
ps.setString(2,user.getCity());
ps.setString(3,user.getPhone());
ps.addBatch();
if(++count % batchSize == 0)
ps.executeBatch();
}
ps.executeBatch();
ps.close();
conn.close();
现在在同一个循环中,我想批量插入另一个 table UserSettings。因为我不想循环两次 JSON 来获取 UserSettings 信息。请提供一些解决方案!
我认为每个 table 在同一个循环中都有一个单独的线程。在每个线程中,我都会有他的批次。不确定这是否可行,也许还有其他一些解决方案。
您可以为 INSERT INTO USERSETTINGS
创建另一个 PreparedStatement
并在同一循环中为那个调用 addBatch
/ executeBatch
。
如果这是离线/一次性操作,您可能有更多选择(特定于供应商的加载程序工具),但这取决于您的 RDBMS。
我正在解析保存用户信息的 JSON 文件。我一一获取信息并构建一些 class es,例如 User,UserSettings。现在所有这些信息都应该插入到数据库中。
JSON 文件太大,可以有超过 500000 个用户。
要插入例如用户 class 信息,我使用以下代码:
String sql = "INSERT INTO USERS (name, city, phone) values (?,?,?)";
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
final int batchSize = 500;
int count = 0;
User user;
UserSettings userSettings;
for (loop JSON file here and get user info one by one)
{
user = parseUser();
userSettings = parseUserSettings();
ps.setSting(1,user.getName());
ps.setString(2,user.getCity());
ps.setString(3,user.getPhone());
ps.addBatch();
if(++count % batchSize == 0)
ps.executeBatch();
}
ps.executeBatch();
ps.close();
conn.close();
现在在同一个循环中,我想批量插入另一个 table UserSettings。因为我不想循环两次 JSON 来获取 UserSettings 信息。请提供一些解决方案!
我认为每个 table 在同一个循环中都有一个单独的线程。在每个线程中,我都会有他的批次。不确定这是否可行,也许还有其他一些解决方案。
您可以为 INSERT INTO USERSETTINGS
创建另一个 PreparedStatement
并在同一循环中为那个调用 addBatch
/ executeBatch
。
如果这是离线/一次性操作,您可能有更多选择(特定于供应商的加载程序工具),但这取决于您的 RDBMS。