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