Ошибка ArrayIndexOutOfBoundsException при использовании opencsv

Я надеюсь, что кто-то может просветить меня, почему я получаю сообщение об ошибке: «Исключение в потоке «основной» java.lang.ArrayIndexOutOfBoundsException: 1»

Я использую opencsv для вставки данных из csv, и код работает, так как данные вставляются в таблицу, как и ожидалось. Однако я получаю сообщение об ошибке.

Ниже мой код:

    PreparedStatement sql_statement = null;         
    String jdbc_insert_sql = "INSERT INTO wifi_users(email, first_name, last_name, gender, birthday, opted_in) VALUES (?, ?, ?, ?, ?, ?)";
    sql_statement = conn.prepareStatement(jdbc_insert_sql);

    /* Read CSV file in OpenCSV */
    String inputCSVFile = "/Users/Gerry/Documents/workspace/sql_out_connection/users.csv";
    CSVReader reader = new CSVReader(new FileReader(inputCSVFile));

    /* Variables to loop through the CSV File */
    String [] nextLine; /* for every line in the file */ 
    int lnNum = 0; /* line number */
    while ((nextLine = reader.readNext()) != null) {
            lnNum++;                    
            sql_statement.setString(1,(nextLine[0]));
            sql_statement.setString(2,(nextLine[1]));
            sql_statement.setString(3,(nextLine[2]));
            sql_statement.setString(4,(nextLine[3]));
            sql_statement.setString(5,(nextLine[4]));
            sql_statement.setDouble(6,Double.parseDouble(nextLine[5]));
            /* execute the insert statement */
            sql_statement.executeUpdate();
    }   

Кто-нибудь знает, почему я получаю эту ошибку?


person user1523236    schedule 21.03.2016    source источник


Ответы (1)


В одной из строк вашего CSV-файла меньше ожидаемого минимума из 6 значений (0-5), следовательно, возникает исключение ArrayIndexOutOfBoundsException.

Вероятно, вам следует убедиться, что вам требуется 6 значений, прежде чем приступить к обновлению базы данных.

Вам не нужны дополнительные круглые скобки вокруг ваших значений BTW. Лучше так...

sql_statement.setString(1, nextLine[0]);
person ManoDestra    schedule 21.03.2016
comment
Спасибо Мано. Вы были правы, была 1 строка, в которой отсутствовала запятая между двумя значениями, поэтому она интерпретировалась как 5, а не 6. - person user1523236; 22.03.2016
comment
Потрясающий. Рад, что исправил это для вас. Не могли бы вы тогда отметить это как свой ответ? :) - person ManoDestra; 22.03.2016