Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JDBC-Batch mit PreparedStatement funktioniert nicht in MySQL

Anscheinend erstellen Sie ein neues PreparedStatement.html a> bei jeder Iteration, also executeBatch() wird nur auf das letzte PreparedStatement angewendet Objekt.

Außerdem PreparedStatement wird verwendet, um eine SQL-Injektion zu vermeiden, und kümmert sich um das Escapezeichen von Werten, wenn Sie ? verwenden Platzhaltersystem.

Der addBatch() Methode, die Sie verwenden, soll mit variablen Parametern arbeiten:

, nicht mit rohen Abfragen, wie Sie es versucht haben (dafür würden Sie addBatch(java.lang.String-Abfrage)

Das folgende Beispiel sollte das tun, was Sie wollen:

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