将String Arraylists的ArrayList作为记录插入MySQL数据库

时间:2016-02-19 15:59:54

标签: java mysql jdbc arraylist

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

我有一个方法可以很好地提取这些数据,并返回String ArrayLists的完整ArrayList。我遇到的问题是尝试将这些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:Index:8,Size:8

1 个答案:

答案 0 :(得分:1)

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

同样,您只需拨打execute()一次 - 但您应该每插入一次调用(并在executeUpdate()INSERT时调用UPDATE)或您可以批量插入,然后调用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();