Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le lot JDBC avec PreparedStatement ne fonctionne pas dans MySQL

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