Java няма да ви позволи да добавите само ? в параметъра на низовия низ на readystatement, тъй като очаква ? за заместващо място само за параметрите към дадения SQL.
За вашия случай може да се наложи да имате 2 подготвени обекта на оператора и в цикъл можете да вземете решение кой да извикате. Така че би било нещо като по-долу:
PreparedStatement insertPstmt = connection.prepareStatement("INSERT INTO MY_TABLE VALUES(?,?,?,?)");
PreparedStatement updatePstmt = connection.prepareStatement("UPDATE MY_TABLE, SET MY_VAL=? WHERE MY_VAL IS NULL");
While (<condition>) {
If (<insert condition>) {
// use insert pstmt and add batch
} else {
// use update pstmt and add batch
}
}
insertPstmt.executeBatch();
updatePstmt.executeBatch();
ако имате някакъв insert, който зависи от актуализацията, можете да изпълните партидите съответно. Това ще гарантира, че актуализацията ще работи правилно. Бих помислил първо да изпълня insert, тъй като те може да не зависят от актуализацията.