我正在做一个项目,它将读取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
答案 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();