Parece que está creando una nueva PreparedStatement en cada iteración, por lo que executeBatch()
solo se aplicará a la última PreparedStatement
objeto.
Además, PreparedStatement
se usa para evitar la inyección de SQL y se encarga de los valores que se escapan, cuando usa el ?
sistema de marcadores de posición.
El addBatch() El método que está utilizando está destinado a trabajar con parámetros variables:
, no con consultas sin formato como intentaste hacer (para eso, usarías addBatch(java.lang.String consulta)
El siguiente ejemplo debería hacer lo que quieras:
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