Galera, estou com um problema. Tenho um programa pronto e rodando, porém da forma que está agora estou tendo um baixo desempenho. Então bolei outro esquema que para mim irá ter um melhor desempenho se funcionar, ao meu ver os dois estão iguais, porém feitos de formas diferentes, mas um da erro e o outro não, alguém poderia me ajudar dizendo onde e pq o erro acontece?
Primeiro método sem erro:
//Aqui eu formato minha string para inserir no banco, da forma que o banco pede.
StringBuilder temp = new StringBuilder(25);
temp.append(vetor[3]);
temp.append("/");
temp.append(vetor[2]);
temp.append("/");
temp.append(vetor[1]);
temp.append(" ");
temp.append(vetor[4]);
temp.append(":");
temp.append(vetor[5]);
temp.append(":");
temp.append(vetor[6]);
temp.append(".");
temp.append(vetor[7]);
ps.setInt(1, Integer.parseInt(vetor[0]));
ps.setString(2, temp.toString());
ps.setString(3, "'DD/MM/YYYY HH24:MI:SS.US'");
ps.setInt(4, Integer.parseInt(vetor[7]));
ps.setDouble(5, Double.parseDouble(vetor[8]));
ps.setDouble(6, Double.parseDouble(vetor[9]));
for(int i=7; i<=9; i++)
ps.setInt(i, Integer.parseInt(vetor[i+3]));
for(int i=10; i<=17; i++)
ps.setDouble(i, Double.parseDouble(vetor[i+3]));
for(int i=18; i<=21; i++)
ps.setInt(i, Integer.parseInt(vetor[i+3]));
ps.addBatch();
}
catch(SQLException ex){
ex.printStackTrace();
System.out.println("Impossivel de se inserir");
}
//e aqui eu insiro no banco com o preparedstatement
ps = conn.prepareStatement("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(?,to_timestamp(?,?),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
Agora a forma onde ocorre o erro:
ps.setInt(1, Integer.parseInt(vetor[0]));
ps.setString(2, vetor[3]);
ps.setString(3, vetor[2]);
ps.setString(4, vetor[1]);
ps.setString(5, vetor[4]);
ps.setString(6, vetor[5]);
ps.setString(7, vetor[6]);
ps.setString(8, vetor[7]);
ps.setString(9, "'DD/MM/YYYY HH24:MI:SS.US'");
ps.setInt(10, Integer.parseInt(vetor[7]));
ps.setDouble(11, Double.parseDouble(vetor[8]));
ps.setDouble(12, Double.parseDouble(vetor[9]));
for(int i=13; i<=15; i++)
ps.setInt(i, Integer.parseInt(vetor[i-3]));
for(int i=16; i<=23; i++)
ps.setDouble(i, Double.parseDouble(vetor[i-3]));
for(int i=24; i<=27; i++)
ps.setInt(i, Integer.parseInt(vetor[i-3]));
ps.addBatch();
ps = conn.prepareStatement("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(?,to_timestamp(?/?/? ?:?:?.?,?),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
Aparecendo este erro:
java.sql.BatchUpdateException: Entrada em lote 0 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(1/12/2007 0:0:9.751741400,'DD/MM/YYYY HH24:MI:SS.US'),751741400,-14.0534,-43.5762,-50,0,5,2.0,8.7,38.4,1.9,3.7,6.0,51.2,-0.0,0,0,0,1) foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2537)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:351)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2674)
at janelaPrincipal.getTabela(janelaPrincipal.java:76)
at janelaPrincipal.<init>(janelaPrincipal.java:20)
at janelaPrincipal$1.run(janelaPrincipal.java:54)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Para ter certeza que nao estava digitando algo errado, mandei antes de enviar para o banco imprimir uma string da minha string de insert e dos dois modos eu obtenho a mesma string, sem tirar nem por, exatamente a mesma. Nao sei onde está o meu erro, nem pq ele ocorre, se alguém poder me ajudar, estou a tarde toda fritando a cabeça sem conseguir resolver o problema.
Vlw novamente galera.