Det verkar som att du skapar en ny PreparedStatement vid varje iteration, så executeBatch()
kommer endast att tillämpas på den sista PreparedStatement
objekt.
Dessutom PreparedStatement
används för att undvika SQL-injektion och tar hand om värden som läcker ut när du använder ?
platshållarsystem.
addBatch() Metoden du använder är avsedd att arbeta med variabla parametrar :
, inte med råa frågor som du försökte göra (för det skulle du använda addBatch(java.lang.String-fråga)
Följande exempel ska göra vad du vill :
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