Ajuda com prepareStatement();

Galera, tenho o seguinte prepareStatement:

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('?/?/? ?:?:?.?','DDMMYYYYHH24MISSUS'),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");

estou setando o prepareStatment desta forma:

            ps.setInt(1, Integer.parseInt(vetor[0]));
            for(int i=2; i<=8; i++)
                ps.setString(i, vetor[i-1]);
            ps.setInt(9, Integer.parseInt(vetor[7]));
            ps.setDouble(10, Double.parseDouble(vetor[8]));
            ps.setDouble(11, Double.parseDouble(vetor[9]));
            ps.setDouble(12, Double.parseDouble(vetor[10]));
            ps.setInt(13, Integer.parseInt(vetor[11]));
            ps.setInt(14, Integer.parseInt(vetor[12]));
            ps.setInt(15, Integer.parseInt(vetor[13]));
            for(int i=16; i<=23; i++)
                ps.setDouble(i, Double.parseDouble(vetor[i-2]));
            for(int i=24; i<=27; i++)
                ps.setInt(i,Integer.parseInt(vetor[i-2]));
            ps.addBatch();

E ta dando este erro:

org.postgresql.util.PSQLException: Nenhum valor especificado para parâmetro 2.
        at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:146)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:315)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2674)
        at janelaPrincipal.getTabela(janelaPrincipal.java:76)
        at janelaPrincipal.<init>(janelaPrincipal.java:23)
        at janelaPrincipal$1.run(janelaPrincipal.java:55)
        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)

Alguém pode me dar uma ajuda de onde está o erro?
Imagino que seja alguma coisa bem boba que nao estou enchergando, porém nao estou conseguindo ver.
Alguém pode me dar uma ajuda? Obrigado.

Eu não sei porque do erro, talvez alguma coisa no vetor esteja nulo, mas se o seu campo na tabela é do tipo timestamp, porque vc não usa ps.setTimestamp(…) ao invés de criar um parâmetro para dia, outro pra mês, outro pra ano, outro pra…

Eu to tentando fazer isso, porém nao sei como fazer. Pois o ps.setTimestamp() precisa de um formato dos EUA, e eu to tentando inserir um formato BR.

            StringBuilder temp = new StringBuilder();
            temp.append(vetor[1]);
            temp.append("/");
            temp.append(vetor[2]);
            temp.append("/");
            temp.append(vetor[3]);
            temp.append(" ");
            temp.append(vetor[4]);
            temp.append(":");
            temp.append(vetor[5]);
            temp.append(":");
            temp.append(vetor[6]);
            temp.append(".");
            temp.append(vetor[7]);

ai to querendo colocar esse stringbuilder como um timestamp, porém estou totalmente perdido =/

Não entendi o precisa de um formato dos EUA.

Enfim, tenta isso:

//ano, mes(de 0 a 11), dia, hora, minutos, segundos long mls = new GregorianCalendar(2008, 4-1, 15, 18, 25, 00).getTimeInMillis(); Timestamp tmsp = new Timestamp(mls); ps.setTimestamp(2,tmsp);

Para falar a verdade eu preciso passar Nanosegundos. Trabalho com raios e isso é o mais necessário.
Fiz desta forma:

            StringBuilder temp = new StringBuilder();
            temp.append("to_timestamp('");
            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]);
           
            /*Timestamp t = new Timestamp(Integer.parseInt(vetor[1]),
                    Integer.parseInt(vetor[2]),
                    Integer.parseInt(vetor[3]),
                    Integer.parseInt(vetor[4]),
                    Integer.parseInt(vetor[5]),
                    Integer.parseInt(vetor[6]),
                    Integer.parseInt(vetor[7])); */
            temp.append("','DDMMYYYYHH24MISSUS')");
ps.setString(2, temp.toString());

Porém ele está dando 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( '1122007009751741400','DDMMYYYYHH24MISSUS'),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$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 janelaPrincipal.getTabela(janelaPrincipal.java:79)
        at janelaPrincipal.<init>(janelaPrincipal.java:24)
        at janelaPrincipal$1.run(janelaPrincipal.java:58)
        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)
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

Tentei usar o Date, porem ele nao me deixa inserir nanosegundos. Ai tentei passar de uma vez soh em comando sql, mas nao estou conseguindo.

Não entendi o precisa de um formato dos EUA.

Enfim, tenta isso:

//ano, mes(de 0 a 11), dia, hora, minutos, segundos long mls = new GregorianCalendar(2008, 4-1, 15, 18, 25, 00).getTimeInMillis(); Timestamp tmsp = new Timestamp(mls); ps.setTimestamp(2,tmsp);
[/quote]

Eu preciso passar algo neste formato: DD/MM/YYYY HH24:MI:SS.US
Onde US eh o nanosegundo.

Não tenho o PostgreSQL aqui, mas ainda não entendi porque vc não pode usar a classe Timestamp

[quote=javadoc do Timestamp]setNanos

public void setNanos(int n)

Sets this Timestamp object's nanos field to the given value...[/quote]

e como depois eu formato os dados que eu inserir para voltarem da forma que eu quiser?]

tipo: DD/MM/YYYY HH24:MI:SS.US ?

Aí vc usa a função to_char no select

http://www.postgresql.org/docs/8.1/static/functions-formatting.html

Eu nao posso por esse to_char no insert? Pois eles querem um dado já formatado inserido no banco, o Timestamp passa yyyy-mm-dd e eu preciso de dd/mm/yyyy.