Изглежда, че създавате нов PreparedStatement при всяка итерация, така че executeBatch()
ще бъде приложен само към последния PreparedStatement
обект.
Освен това PreparedStatement
се използва за избягване на SQL инжекция и се грижи за избягването на стойности, когато използвате ?
система от заместители.
addBatch() методът, който използвате, е предназначен да работи с променливи параметри :
, а не с необработени заявки, както се опитахте да направите (за това бихте използвали addBatch(java.lang.String заявка)
Следният пример трябва да прави това, което искате:
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