Het lijkt erop dat u een nieuwe PreparedStatement bij elke iteratie, dus de executeBatch()
wordt alleen toegepast op de laatste PreparedStatement
object.
Bovendien, PreparedStatement
wordt gebruikt om SQL-injectie te voorkomen en zorgt ervoor dat waarden ontsnappen wanneer u de ?
. gebruikt placeholder systeem.
De addBatch() methode die u gebruikt is bedoeld om te werken met variabele parameters:
, niet met onbewerkte zoekopdrachten zoals je probeerde te doen (daarvoor zou je addBatch(java.lang.String-zoekopdracht)
Het volgende voorbeeld zou moeten doen wat u wilt:
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