Java tillåter inte att du bara lägger till? i strängparametern prepareradestatement, eftersom den förväntar sig ? för platshållaren endast för parametrarna för att ge SQL.
För ditt fall kan du behöva ha 2 förberedda utlåtandeobjekt, och i en loop igenom kan du bestämma vilket du ska ringa. Så det skulle vara något som nedan:
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();
om du har någon insert , som är beroende av uppdateringen, kan du köra batcharna därefter. Detta kommer att se till att uppdateringen fungerar korrekt. Jag skulle tänka på att köra insert först, eftersom de kanske inte beror på uppdatering.