Problemas com o PostGreSQL

8 respostas
E

Olá a todos.

Estou apanhando feio do PostGreSql… hehehe.

Estou realizando um processo de importação que utiliza o banco de dados PostgreSql, onde as queries são armazenadas em um arquivo externas e preparadas através do objeto PreparedStatement.

O caso é o seguinte: Ao passar por um processo de pesquisa após todo uma rota de atualização de tabelas de um registro anterior, ocorre um erro que normalmente acontece quando tentamos obter um ResultSet através de um comando de update, mas não é o que ocorre.

Vou colocar a exceção e a query a ser executada, para facilitar o entendimento:

Erro nro.:0

comandoDB  :select count(*) as numRegistros  from plu where       dataMovimento = 100304   and codSituacao   = 'M'   and codEmpresa    = 0   and codInterno    = 208

No results were returned by the query.
	at org.postgresql.jdbc2.Statement.executeQuery(Statement.java:58)
	at org.postgresql.jdbc2.PreparedStatement.executeQuery(PreparedStatement.java:99)
	at com.itautec.produto.java.transferencia.ProdutoImportacao.validaAtualizacaoProduto(ProdutoImportacao.java:1105)
	at com.itautec.produto.java.transferencia.ProdutoImportacao.validaRegistrosDB(ProdutoImportacao.java:892)
	at com.itautec.produto.java.transferencia.ProdutoImportacao.processoImportacao(ProdutoImportacao.java:259)
	at com.itautec.produto.java.transferencia.ProdutoImportacao.run(ProdutoImportacao.java:124)

Teoricamente, deveria trazer 0 ou outro número, já que forço um retorno através do comando count, mas não é isso o que ocorre. E o estranho é que o fato acima ocorre na segunda vez que o método é executado, quando este está coletando informações da base.

Agradeço qualquer tipo de ajuda, pois já tentei de quase tudo e ainda não encontrei uma solução.

Abraços a todos.
Ederson.

8 Respostas

Z

E essa consulta funciona se você executar diretamente no PostgreSQL?

E

Bom dia.

Sim, esta consulta funciona corretamente.

Eu estou achando que algum comando está ficando em memória e ao solicitar esta nova ação, ele executa novamente a anterior, mas como está esperando um resultset, surge a exception.

Grato.
Ederson.

_fs

Hum, perguntas imbecis, mas quem sabe ajuda :D:

  • você esta executando esta query numa transaction com outras queries?
  • você está fazendo assim?
ResultSet rs = stmt.executeQuery("Select count(*) as c from table");
rs.next();
var = rs.getInt("c");
  • tem certeza que não tem nenhum errinho de digitação aí no meio?
E

Olá Lipe.

O local do erro está em um processo onde é realizado todo o processo de importação segue a seguinte lógica:

  • Pesquisa se o registro existe em uma determinada tabela da base de dados;
  • Se existe, o processo é direcionado para a lógica de alteração, caso contrário, para o processo de inclusão.

O interessante é que o erro ocorre na segunda passagem por esta lógica de alteração, logo após a atualização de uma tabela de transações. E o mais interessante, por mais que eu coloque uma outra query qualquer, o erro persiste.

E respondendo ao seu questionamento sobre a seqüência de comandos, segue o trecho do código (realizei algumas alterações para postá-lo aqui).

// prepara comando
StringBuffer comando = new StringBuffer();
comando.append("select count(*) as numRegistros");
comando.append("  from plu");
comando.append(" where");
comando.append("       dataMovimento = ?");
comando.append("   and codSituacao   = ?");
comando.append("   and codEmpresa    = ?");
comando.append("   and codInterno    = ?");


// Prepara query conforme parâmetros informados
PreparedStatement comando =   (preparacao.preparaQueryTabelas(
                                                 conexao,
                                                 comando.toString(),
                                                 parametros));
                                                        
// Executa query
ResultSet   rsExiste    = null;
rsExiste    = comando.executeQuery();

O erro ocorre no momento da execução do método executeQuery().

Para melhorar a possibilidade de encontrar uma solução, segue as informações do banco de dados e jdbc:

Banco de dados: PostgreSQL 7.2.1
Arquivo JDBC: pg72jdbc2.jar

Att.
Ederson

_fs

:?:

Bem, realmente estranho.

Então sugiro o seguinte, já que o erro é a consulta não retornar nada: faça a query de um jeito basicão, bem porco, pra ver se retorna alguma coisa. No melhor estilo

Statement stm = conn.createStatement(); ResultSet rs = stm.executeQuery( "SELECT count(*) FROM plu WHERE id...=1 ... etc" ); rs.getInt( "count" );

E veja se retorna algo.

E

Vou realizar o teste e posto assim que obtê-lo.

Abraços.
Ederson.

M

só esta query que nao roda ?

E

Olá a todos.

Estou dando um feed-back sobre o caso.

Eu identifiquei o problema, chama-se programador viciado no código. O caso era simples, não sei o que deu em minha cabeça para deixar passar uma coisa dessas.
Todas as queries que eu testava, as colocava sem a tabela origem, conseqüencia, erro na certa.
E só identifiquei o problema quando precisei alterar algumas queries por mudanças na base.

Agradeço a todos pela força.

Abraços.
Ederson.

Criado 7 de junho de 2004
Ultima resposta 17 de jun. de 2004
Respostas 8
Participantes 4