Является ли insert.addBatch () доступным вне этого для l oop? - PullRequest
1 голос
/ 24 февраля 2020

У меня есть несколько циклов for, где я устанавливаю значения для вставки в MySQL DB.
Мой вопрос: будет insert.addBatch (); определить значения вставки, если она находится за пределами для l oop. Ниже приведен пример:

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 ]

1 голос
/ 24 февраля 2020

Если вы используете итераторы, это вставляет как можно больше записей

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();
1 голос
/ 24 февраля 2020

То, как вы это делаете, не работает. Вы должны позвонить и сделать один l oop примерно так:

    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() отменяет предыдущий.

...