Galera, tenho um programa que apenas le um arquivo e popula um banco, o problema é a quantidade de dados, cada arquivo possui cerca de 1milão de linhas.
Estão estou utilizando o executeBatch(); para conseguir melhor performace. Adiciono 100k em 100k de linha para nao estourar a memoria, porém em uma dessas linhas deu problema com o banco(creio que algum campo com valor maior que o máximo permitido pelo banco) e deu erro, até ai tudo bem, o problema é, como eu mando pro banco de 100k em 100k linhas, quando da erro em uma eu perco o restante que ainda faltavam inserir desse pacote de 100k e então ele pula pro próximo pacote de 100k de linhas, entenderam?
O programa me envia este código de erro:
java.sql.BatchUpdateException: Batch entry 8,659 insert into dat_tr_stroke (dat_versao_ualf,dat_data,dat_nanosegundo,dat_latitude,dat_longitude,dat_corrente_pico_ka,dat_multiplicidade,dat_numero_sensores,dat_graus_liberdade,dat_azimute_elipse,dat_semieixo_maior,dat_semieixo_menor,dat_chiquadrado,dat_tempo_subida,dat_largura_pulso,dat_maxima_derivada,dat_flag_intranuvem,dat_flag_angulo,dat_flag_sinal,dat_flag_tempo) values(0,to_timestamp(26/2/2008 0:27:55.995582215,'DD/MM/YYYY HH24:MI:SS.US'),995582215,-16.6656,-44.6357,-22,0,2,1.0,62.0,5.8,0.7,4.1,4.4,23.4,-0.0,0,1,0,1) was aborted. Call getNextException to see the cause.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2537)
at org.postgresql.core.v3.QueryExecutorImpl$ErrorTrackingResultHandler.handleError(QueryExecutorImpl.java:283)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:332)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2674)
at testePopularBanco.getTabela(testePopularBanco.java:54)
at testePopularBanco.main(testePopularBanco.java:18)
Como que eu faço para nao perder o restante de linhas que estavam neste pacote de 100k que eu estava enviando? É possível se gerar um log para saber em qual linha foi encontrado o programa e após isso continuar enviando as linhas normalmente?
Espero ter sido claro na minha dúvida, se não avisem que tento explicar melhor. Se alguém tiver alguma solução, valeu galera.