在一个循环中插入到不同的表中

时间:2015-03-15 07:33:23

标签: java multithreading jdbc batch-processing

我正在解析保存用户信息的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。因为我不想循环两次JSON以获取UserSettings信息。请提供一些解决方案!

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

1 个答案:

答案 0 :(得分:0)

您可以为PreparedStatement创建另一个INSERT INTO USERSETTINGS,并在同一循环中为该addBatch / executeBatch调用。

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