Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Java - como inserções e atualizações de banco de dados em lote


Java não permitirá que você adicione apenas? no parâmetro de string preparestatement, pois espera o ? para o espaço reservado apenas para os parâmetros para o SQL fornecido.

Para o seu caso, você pode ter que ter 2 objetos de instrução preparados e, em loop, você pode decidir qual deles chamar. Então seria algo como abaixo:
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();

se você tiver algum insert , que dependa da atualização, poderá executar os lotes de acordo. Isso garantirá que a atualização funcione corretamente. Eu pensaria em executar insert primeiro, pois eles podem não depender de atualização.