sql >> Database >  >> RDS >> Mysql

JDBC-batch met PreparedStatement werkt niet in MySQL

Het lijkt erop dat u een nieuwe PreparedStatement bij elke iteratie, dus de executeBatch() wordt alleen toegepast op de laatste PreparedStatement object.

Bovendien, PreparedStatement wordt gebruikt om SQL-injectie te voorkomen en zorgt ervoor dat waarden ontsnappen wanneer u de ? . gebruikt placeholder systeem.

De addBatch() methode die u gebruikt is bedoeld om te werken met variabele parameters:

, niet met onbewerkte zoekopdrachten zoals je probeerde te doen (daarvoor zou je addBatch(java.lang.String-zoekopdracht)

Het volgende voorbeeld zou moeten doen wat u wilt:

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


  1. Opgeslagen Oracle-procedure:retourneer zowel de resultaatset als de out-parameters

  2. ORA-00904:ongeldige identificatie

  3. Geautomatiseerde of regelmatige back-up van mysql-gegevens

  4. krijg mime-type afbeelding