sql >> Base de Datos >  >> RDS >> Mysql

Lote de JDBC con PreparedStatement no funciona en MySQL

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