É isto que acontece. Mas tipo, a natureza do addBatch é guardar na memória
as consultas para poder fazê-las todas de uma vez para ganhar em eficiência
se não me engano.

Um exemplo é o código deste link:
http://www.java2s.com/Code/JavaAPI/java.sql/PreparedStatementaddBatch.htm

Ele dá os addBatch:

 e depois dá o update, tudo de uma vez no
statement.executeBatch();
Eu fiz desse jeito mas no Postgrees dá o exceção que coloquei no primeiro
email. E este exemplo anterior é com MySQL., aí pode ser algo do postgrees
pois a exceção é especifica dele. Aí continuo na dúvida.
--------------------------------------------------------------------------------------------------
"Se um dia tiver que escolher entre o mundo e o amor... Lembre-se:
Se escolher o mundo, ficará sem o amor, mas se escolher o amor,
com ele conquistará o mundo." (Albert Einstein)
╔════════════════════════════════════════╗
  ROMERYTO VIEIRA LIRA
  Bacharelando em Ciência da Computação - UFCG
  Membro do SegHidro2 - LSD - http://seghidro.lsd.ufcg.edu.br
  Membro do Grupo de Suporte Guardians - www.lcc.ufcg.edu.br
  Página Pessoal: http://romeryto.googlepages.com
  Blog: http://olhartecnologico.blogspot.com
╚════════════════════════════════════════╝

Pensou em imprimir este e-mail? Isto é mesmo necessário? Poupe o meio
ambiente.
----------------------------------------------------------------------------------------------------------------------------


2009/1/20 Osvaldo Kussama <[email protected]>

> Em 20/01/09, Romeryto Lira<[email protected]> escreveu:
> > Olá pessoal,
> >
> > Estou desenvolvendo uma aplicação que acessa o Postgres.
> > Estou acessando o mesmo via JDBC. Porém o mesmo retorna um exceção
> > específica do postgree quando uso o comando addBatch quando uso o
> > executeBatch do objeto PreparedStatement.
> >
> > org.postgresql.util.PSQLException: Um resultado foi retornado quando
> nenhum
> > era esperado.
> > SEEEEEE
> >     at
> >
> org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleResultRows(AbstractJdbc2Statement.java:2501)
> >     at
> >
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1269)
> >     at
> >
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:351)
> >     at
> >
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2674)
> >     at
> >
> br.edu.ufcg.lsd.seghidro.server.persistencia.PersistenciaFacedeBDJDBC.getAllMedicoesPluviometricasFromMunicipio(PersistenciaFacedeBDJDBC.java:252)
> >     at
> >
> br.edu.ufcg.lsd.seghidro.server.testes.PersistenciaFacedeJDBCTestPluviometria.testGetAllMedicoesPluviometricasFromMunicipio_1(PersistenciaFacedeJDBCTestPluviometria.java:108)
> >     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> >     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> >     at java.lang.reflect.Method.invoke(Unknown Source)
> >     at
> >
> org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
> >
> > Usando agora o método executeQuery usando o *addBatch* mas o mesmo não
> > armazena
> > de forma correta as consultas a serem feitas, ou seja, a mesma só executa
> > para o último PostoPluviométrico(ver código abaixo):
> >
> > *private static List<MedicaoPrecipitacao>
> >
> recuperarMedicoesPluviometricasDeVariosPostosPluviometricos(List<PostoPluviometrico>
> > postosPluviometricos, Date dataInicial, Date dataFinal) {
> >         Connection conn = null;
> >         PreparedStatement pStatement = null;
> >         ResultSet rs = null;
> >         List <MedicaoPrecipitacao> result = new
> > ArrayList<MedicaoPrecipitacao>();
> >         try {
> >             conn = GerenciadorDeConexao.getConnection();
> >
> >             String query = "select m.* from " +
> >                     "medicoes_pluviometria_view m " +
> >                     "where m.codigo_posto=? and " +
> >                     "m.data between ? and ? " +
> >                     " order by data" ;
> >
> >             pStatement = conn.prepareStatement(query);
> >
> >             for (PostoPluviometrico postoPluviometrico :
> > postosPluviometricos) {
> >
> >                 pStatement.setInt(1, postoPluviometrico.getCodigo());
> >                 pStatement.setDate(2, new
> > java.sql.Date(dataInicial.getTime()));
> >                 pStatement.setDate(3, new
> > java.sql.Date(dataFinal.getTime()));
> >
> >                 pStatement.addBatch();
> >
> >
> >             }
>
> Eu não entendo muito de Java mas este "}" acima não está em lugar errado?
> Ele vai executar o comando abaixo apenas com o último elemento do loop.
>
>
> >
> >             rs = pStatement.executeQuery();
> >             (Depois disso o ResultSet só tem resultados do último posto
> > pluviométrico)
> >             while (rs.next()) {
> >                 MedicaoPrecipitacao m = new MedicaoPrecipitacao();
> >                 m.setCodigo(rs.getInt(1));
> >                 m.setData(rs.getDate(2));
> >                 m.setValor(rs.getDouble(3));
> >                 m.setCodigoPostoPluviometrico(rs.getInt(4));
> >                 result.add(m);
> >
> >             }
> >         } catch (SQLException e) {
> >             System.out.println("Não conseguiu acessar o Banco de
> Dados.");
> >             e.printStackTrace();
> >         } finally {
> >             try {
> >                 conn.close();
> >                 pStatement.close();
> >                 if(rs!=null){
> >                     rs.close();
> >                 }
> >             } catch (SQLException e) {
> >                 e.printStackTrace();
> >             } catch (Exception e) {
> >                 e.printStackTrace();
> >             }
> >         }
> >         return result;
> >     }
> >
> > *Vi na net exemplos que usam esta funcionalidade desta forma com sucesso
> mas
> > não era com o postgres. Como a exceção que apareceu foi especifica do
> mesmo
> > resolvi mandar esta duvida aqui pra lista.
> >
> > No caso, como faço para o addBatch colocar no batch realmente todas as
> > consultas e não só para última. O que me parece é que no postgres quando
> se
> > dá um addBatch, a consulta armazenada anteriormente é sobrescrita, o que
> > pela natureza deste método não era para acontecer.
> >
> > Fico muito grato pela a atenção* *e agradeço desde já a ajuda.*
> > *
>
>
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a