Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Java - wie Datenbankeinfügungen und -aktualisierungen im Batch ausgeführt werden

Java erlaubt Ihnen nicht, nur hinzuzufügen? im Zeichenkettenparameter der vorbereiteten Anweisung, da es das ? für den Platzhalter nur für die Parameter zum Geben von SQL.

Für Ihren Fall müssen Sie möglicherweise zwei vorbereitete Anweisungsobjekte haben, und in der Schleife können Sie entscheiden, welches aufgerufen werden soll. Es wäre also so etwas wie unten:

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();

Wenn Sie eine Einfügung haben, die von der Aktualisierung abhängig ist, können Sie die Stapel entsprechend ausführen. Dadurch wird sichergestellt, dass das Update ordnungsgemäß funktioniert. Ich würde daran denken, insert zuerst auszuführen, da sie möglicherweise nicht von update abhängen.