是否可以在for循环之外访问insert.addBatch()?

时间:2020-02-24 14:31:44

标签: java sql for-loop prepared-statement

我有多个for循环,在其中设置要插入到MySQL DB中的值。
我的问题是将insert.addBatch();如果插入值在for循环之外,请检测插入值。下面是一个示例:

List<String> lstUser = usageEvent.getUserName();
List<String> lstFullName = usageEvent.getFullName();
List<String> lstUserType = usageEvent.getUserType();

for(String userName : lstUser) {
            insert.setString(1, userName);
        }
for(String fullName : lstFullName) {
            insert.setString(2, fullName);
        }
for(String userType : lstUserType) {
            insert.setString(3, userType);
        }
insert.addBatch();

编辑:上面添加了额外的代码,以显示我正在从列表强制转换为字符串以获取值。我不确定这是否会改变问题的解决方法。

2 个答案:

答案 0 :(得分:1)

您的操作方式无效。您必须像这样调用一个循环:

    String[] userNames = { "Herbert", "Daphne", "Donald J." };
    String[] fullNames = { "Herbert P.", "Daphne S.", "Donald J. T." };
    String[] userTypes = { "Janitor", "Construction Worker", "President" };

    PreparedStatement insert = getStatement();

    for (int i = 0; i < userNames.length; i++) {
      insert.setString(1, userNames[i]);
      insert.setString(2, fullNames[i]);
      insert.setString(3, userTypes[i]);
      insert.addBatch();
    }

    insert.executeUpdate();

基本上,您对setString()的最后一次调用会覆盖上一个。

答案 1 :(得分:1)

如果您使用迭代器,则会插入尽可能多的记录

Iterator<String> iUserName = idvEUserName.iterator();
Iterator<String> iFullName = idvEFullName.iterator();
Iterator<String> iUserType = idvEUserType.iterator();

while(iUserName.hasNext() && iFullName.hasNext() && iUserType.hasNext()) {
    insert.setString(1, iUserName.next());
    insert.setString(2, iFullName.next());
    insert.setString(3, iUserType.next());
    insert.addBatch(); 
}
insert.executeUpdate();