Sembra che tu stia creando un nuovo PreparedStatement ad ogni iterazione, quindi executeBatch()
verrà applicato solo all'ultimo PreparedStatement
oggetto.
Inoltre, PreparedStatement
viene utilizzato per evitare l'iniezione SQL e si occupa dell'escape dei valori, quando si utilizza il ?
sistema di segnaposto.
Il addBatch() il metodo che stai utilizzando è pensato per funzionare con parametri variabili:
, non con query grezze come hai provato a fare (per questo, useresti addBatch(query java.lang.String)
Il seguente esempio dovrebbe fare quello che vuoi :
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