Java 插入到不同的表在一个循环中批处理

Java 插入到不同的表在一个循环中批处理,java,multithreading,jdbc,batch-processing,Java,Multithreading,Jdbc,Batch Processing,我正在解析一个保存用户信息的JSON文件。我一个接一个地获取信息,并构建一些类,比如User、UserSettings。现在,所有这些信息都应该插入到数据库中 JSON文件太大,可能有超过500000个用户 要插入例如用户类信息,我使用以下代码: String sql = "INSERT INTO USERS (name, city, phone) values (?,?,?)"; Connection conn = getConnection(); PreparedStatement ps =

我正在解析一个保存用户信息的JSON文件。我一个接一个地获取信息,并构建一些类,比如User、UserSettings。现在,所有这些信息都应该插入到数据库中

JSON文件太大,可能有超过500000个用户

要插入例如用户类信息,我使用以下代码:

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();
现在在同一个循环中,我想批量插入另一个表UserSettings。因为我不想为了获得UserSettings信息而循环两次JSON。请提供一些解决方案


我认为每个表在同一个循环中都有一个单独的线程。在每一个线程中,我都有他的批。不确定这是否有效,可能还有其他解决方案。

您可以为插入用户设置的
创建另一个
PreparedStatement
,并在同一循环中调用
addBatch
/
executeBatch


如果这是一个离线/一次性操作,您可能有更多的选择(特定于供应商的加载工具),但这取决于您的RDBMS。

这应该每天执行,数据库是MySQL。我需要调用一个返回JSON文件的API。每天我都需要解析它并将数据加载到数据库中