Có vẻ như bạn đang tạo một PreparedStatement tại mỗi lần lặp, vì vậy executeBatch()
sẽ chỉ được áp dụng cho PreparedStatement
cuối cùng sự vật.
Hơn nữa, PreparedStatement
được sử dụng để tránh việc đưa vào SQL và nó xử lý các giá trị thoát ra khi bạn sử dụng ?
hệ thống giữ chỗ.
addBatch () phương pháp bạn đang sử dụng có nghĩa là hoạt động với các tham số biến:
, không phải với các truy vấn thô như bạn đã cố gắng làm (đối với điều đó, bạn sẽ sử dụng addBatch(java.lang.String query)
Ví dụ sau sẽ làm những gì bạn muốn:
String[][] data = { { "first", "data" }, { "second", "data" }, { "third", "data" } };
String sql = "insert into abc(col1,col2) values (?, ?)";// use placeholders
PreparedStatement pst = connection.prepareStatement(sql);// create a single statement
for (String[] row : data) {
// set parameters
pst.setString(1, row[0]);
pst.setString(2, row[1]);
pst.addBatch();// validate the set
}
int[] chkSql = pst.executeBatch(); // execute the batch of commands
//check if chkSql consists of 0..rollback else commit for > 0