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

Java 是否可以在此for循环之外访问insert.addBatch()?,java,sql,for-loop,prepared-statement,Java,Sql,For Loop,Prepared Statement,我有多个for循环,我在其中设置要插入MySQL数据库的值

我有多个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();
List lstUser=usagevent.getUserName();
List lstFullName=usagevent.getFullName();
List lstUserType=usageEvent.getUserType();
for(字符串用户名:lstUser){
插入.setString(1,用户名);
}
for(字符串全名:lstFullName){
插入.setString(2,全名);
}
for(字符串用户类型:lstUserType){
insert.setString(3,用户类型);
}
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();
String[]用户名={“赫伯特”、“达芙妮”、“唐纳德J.”};
字符串[]全名={“Herbert P.”、“Daphne S.”、“Donald J.T.”;
String[]userTypes={“看门人”、“建筑工人”、“总裁”};
PreparedStatement insert=getStatement();
for(int i=0;i

基本上,上一次调用
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();
Iterator iUserName=idvEUserName.Iterator();
迭代器iFullName=idvEFullName.Iterator();
迭代器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();

不,不会。如果你使用IDE,它会报告编译错误。你为什么不自己试试呢?@Lealcelderio你建议我怎么做来修复它?这些集合的大小总是一样的吗?如果是这样,只需为
循环创建一个简单的
,然后逐个添加它们one@Amongalen我没有db连接来尝试它,是的,集合的大小是相同的,所以我可以这样做,谢谢!但是为循环添加一个退出条件:)如果我处理的是arrayList,我可以使用arrayList.size而不是上面字符串数组使用的.length吗?@nice96当然可以。不知道我在解决方案中使用了迭代器的集合,是什么处理所有这些集合的