Em 20/01/09, Romeryto Lira<romer...@gmail.com> 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral