Mysql
 sql >> Database >  >> RDS >> Mysql

Batch JDBC con PreparedStatement non funzionante in MySQL

Sembra che tu stia creando un nuovo PreparedStatement ad ogni iterazione, quindi executeBatch() verrà applicato solo all'ultimo PreparedStatement oggetto.

Inoltre, PreparedStatement viene utilizzato per evitare l'iniezione SQL e si occupa dell'escape dei valori, quando si utilizza il ? sistema di segnaposto.

Il addBatch() il metodo che stai utilizzando è pensato per funzionare con parametri variabili:

, non con query grezze come hai provato a fare (per questo, useresti addBatch(query java.lang.String)

Il seguente esempio dovrebbe fare quello che vuoi :

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