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