Il semble que vous créez un nouveau PreparedStatement à chaque itération, donc le executeBatch()
ne sera appliqué qu'au dernier PreparedStatement
objet.
De plus, PreparedStatement
est utilisé pour éviter l'injection SQL et s'occupe des valeurs qui s'échappent, lorsque vous utilisez le ?
système d'espaces réservés.
Le addBatch() la méthode que vous utilisez est censée fonctionner avec des paramètres variables :
, pas avec des requêtes brutes comme vous avez essayé de le faire (pour cela, vous utiliseriez addBatch(java.lang.String query)
L'exemple suivant devrait faire ce que vous voulez :
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