【问题标题】:Inserting an ArrayList of String Arraylists as records into MySQL database将字符串数组列表的 ArrayList 作为记录插入 MySQL 数据库
【发布时间】:2016-02-19 15:59:54
【问题描述】:

我正在做一个项目,它将读取 Excel 电子表格行的每个单元格的内容,并将所有这些信息存储在 String ArrayLists 的 ArrayList 中,然后将所有这些行作为记录插入 MySQL 数据库。

我有一个方法可以很好地提取这些数据,并返回字符串数组列表的完整数组列表。我遇到的问题是尝试将这些 String ArrayLists 作为记录插入 SQL 数据库。我在运行时遇到索引越界异常。

谁能解释一下我哪里出错了?我认为我对 ArrayLists/looping/JDBC/之前的所有内容的理解存在一些根本性的缺陷。

public void insertData(ArrayList<ArrayList<String>> l) {
    try {

        String insert = "INSERT INTO 1person (ModuleNumber, ModuleTitle, School, ModuleCoordinator, NumberOfStudents, ExamCW, Courses, Blankety, Blank) VALUES (?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = con.prepareStatement(insert);

        for (ArrayList<String> ar1 : l) {
            //for(int i = 0; i < ar1.size(); i ++){
            //ps.setString(i+1, ar1.get(i)
            ps.setString(1, ar1.get(0).toString());
            ps.setString(2, ar1.get(1).toString());
            ps.setString(3, ar1.get(2).toString());
            ps.setString(4, ar1.get(3).toString());
            ps.setString(5, ar1.get(4).toString());
            ps.setString(6, ar1.get(5).toString());
            ps.setString(7, ar1.get(6).toString());
            ps.setString(8, ar1.get(7).toString());
            ps.setString(9, ar1.get(8).toString());
            //}

        }
        ps.execute();

    } catch (Exception ex) {
        System.out.println(ex);
    }
}

返回:java.lang.IndexOutOfBoundsException:索引:8,大小:8

【问题讨论】:

  • 您的列表大小8,但您正尝试从列表中检索9 项目为ar1.get(8)
  • 你能解决这个问题吗?
  • 是的 Jan,谢谢。抱歉回复晚了。

标签: java mysql jdbc arraylist


【解决方案1】:

您似乎只有 8 个值,而应该有 9 个(您尝试插入 9 个值!)

同样,您只调用一次 execute() - 但您应该在每行插入时调用它(并在 INSERTUPDATE 的情况下调用 executeUpdate()),或者您可以批量插入然后调用executeBatch().

试试这样:

for (ArrayList<String> ar1 : l) {
   if(line.size() != 9) {      
     System.out.println("This line only had "+line.size()+" elements - supposed to contain 9");
     for(String item : ar1) {
        //Show for finding the error
        System.out.println("- " + item);
     }
   } else {
      for(int i = 0; i <9; ++i) {
        ps.setString(i+1, ar1.get(i));
      }
      //Mark this line to be added
      ps.addBatch();
   }     
}
int[] result = ps.executeBatch();

【讨论】:

  • 谢谢 Jan,这让我明白了。现在完美运行!许多thnaks
猜你喜欢
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
相关资源
最近更新 更多