我这样做但在数据库的最后一行只更新。
我已检查过20行,所有行都是在addbatch时添加但是在executeBatch时,在数据库中仅添加了最后一行。
ArrayList<String> li = (ArrayList<String>)request.getAttribute("VL01Data");
Iterator<String> it = li.iterator();
String splitter = request.getAttribute("SPLITTER") != null ?(String)request.getAttribute("SPLITTER"): "!";
String QueryIn = "INSERT INTO ......) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
while(it.hasNext()) {
String value =it.next().toString();
StringTokenizer strTok = new StringTokenizer(value,splitter);
String S = strTok.nextElement().toString().trim();
String I = strTok.nextElement().toString().trim();
String M = strTok.nextElement().toString().trim();
String d = strTok.nextElement().toString();
String R = strTok.nextElement().toString().trim();
String Pu = strTok.nextElement().toString().trim();
.
.
pstmt = con.prepareStatement(QueryIn);
pstmt.setString(1,e );
pstmt.setString(2, r);
pstmt.setString(3, y);
pstmt.setString(4, d);
pstmt.setString(5, y);
pstmt.setString(6, i);
.
.
pstmt.setString(19,f1 );
pstmt.setString(20,f2);
pstmt.addBatch();
}
pstmt.executeBatch();
con.commit();
答案 0 :(得分:1)
不要在循环体中重新prepare
语句。在循环之前准备一次
pstmt = con.prepareStatement(QueryIn);
while(it.hasNext()) {
String value = it.next().toString();
StringTokenizer strTok = new StringTokenizer(value,splitter);
String S = strTok.nextElement().toString().trim();
String I = strTok.nextElement().toString().trim();
String M = strTok.nextElement().toString().trim();
String d = strTok.nextElement().toString();
String R = strTok.nextElement().toString().trim();
String Pu = strTok.nextElement().toString().trim();
// pstmt=con.prepareStatement(QueryIn);
// ...
当您通过调用pstmt
重新分配prepareStatement
引用时,它会丢失先前的(批处理)状态(在每次循环迭代中),因此您只能获得当你致电executeBatch()
时,最后一个。