Re: [pgbr-geral] Dúvida - Erro PreparedStatement com a ddBatch no Postgresql

2009-01-21 Por tôpico Dickson S. Guedes
Romeryto Lira 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.
 SEE
 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 (...)

Este erro geralmente ocorre quando se utiliza o execute para 
instruções SELECT (que retornam resultados), quando era esperado que 
fosse utilizado INSERT, UPDATE ou DELETE que não retornam resultados.

-- 
Dickson S. Guedes
Administrador de Banco de Dados
Confesol - Projeto Colmeia
Florianopolis, SC, Brasil
(48) 3322-1185, ramal: 26

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida - Erro PreparedStatement com a ddBatch no Postgresql

2009-01-21 Por tôpico Dickson S. Guedes
Romeryto Lira escreveu:
 Realmente. Muito obrigado pelos exclarecimentos pessoal.

Conseguiu solucionar o problema Romeryto?

Caso sim, não esqueça de responder o email para a lista com a solução, 
colocando na frente do assunto [RESOLVIDO].

Caso não, continuamos na expectativa

[]s
Guedes


-- 
Dickson S. Guedes
Administrador de Banco de Dados
Confesol - Projeto Colmeia
Florianopolis, SC, Brasil
(48) 3322-1185, ramal: 26

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Dúvida - Erro PreparedStatement com a ddBatch no Postgresql

2009-01-20 Por tôpico Romeryto Lira
É 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 osvaldo.kuss...@gmail.com

 Em 20/01/09, Romeryto Liraromer...@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.
  SEE
  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 ListMedicaoPrecipitacao
 
 recuperarMedicoesPluviometricasDeVariosPostosPluviometricos(ListPostoPluviometrico
  postosPluviometricos, Date dataInicial, Date dataFinal) {
  Connection conn = null;
  PreparedStatement pStatement = null;
  ResultSet rs = null;
  List MedicaoPrecipitacao result = new
  ArrayListMedicaoPrecipitacao();
  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));