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

Is insert.addBatch() accessible outside of this for loop?

我有多个 for 循环,我在其中设置要插入到 MySQL 数据库中的值。
我的问题是 will 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();

编辑:在上面添加了额外的代码以表明我正在从列表转换为字符串以获取值。我不确定这是否会改变问题的处理方式。

你的方法不行。你必须像这样调用一个循环:

    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() 会覆盖之前的调用。

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

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();