Fórum Tirar mensagem de retorno do postgresql #404699

09/07/2011

0

Colegas, mudei o firebird para o postgresql 9, e esta funcionando perfeitamente meu método e incluir, alterar e excluir.No entanto, apos a execução da função o postgresql da uma mensagem de retorno, e essa mensagem fica aparecendo na tela. Como faço para tira-la?Abaixo o metodo e o stacktrace da mensagem:

public void addFornecedor(Fornecedor frn){                          try {            String sql = "select fn_iad_fornecedor(?,?,?,?,?,?,?,?,?,?,?,?)";                        executeCommand(sql,frn.getIdforn(),frn.getNome(),frn.getEndereco(),frn.getNumero(),frn.getComplemento(),frn.getBairro(),                    frn.getCidade(),frn.getInscEstadual(),frn.getTelefone(),frn.getEmail(),frn.getUsuario(),frn.getOpr());                                   } catch (PSQLException pg){                        JOptionPane.showMessageDialog(null, "Não foi possível realizar a operação  postgresql!"+ "\n" + pg,"Restrição de Acesso Firebird", JOptionPane.ERROR_MESSAGE);                    Logger.getLogger(FornecedorDao.class.getName()).log(Level.SEVERE, null, pg);        }                        catch(SQLException e) {                                                JOptionPane.showMessageDialog(null, "Não foi possível realizar a operação!"+ "\n" + e,"Restrição de Acesso", JOptionPane.ERROR_MESSAGE);                   }    } 




09/07/2011 22:25:48 treinamento.dao.FornecedorDao addFornecedorGRAVE: nullorg.postgresql.util.PSQLException: Um resultado foi retornado quando nenhum era esperado.	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:337)	at treinamento.dao.GenericaDao.executeCommand(GenericaDao.java:91)	at treinamento.dao.FornecedorDao.addFornecedor(FornecedorDao.java:39)	at treinamento.forms.frmFornecedor.btnConfirmarActionPerformed(frmFornecedor.java:537)	at treinamento.forms.frmFornecedor.access$400(frmFornecedor.java:36)	at treinamento.forms.frmFornecedor$6.actionPerformed(frmFornecedor.java:357)	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)	at java.awt.Component.processMouseEvent(Component.java:6289)	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)	at java.awt.Component.processEvent(Component.java:6054)	at java.awt.Container.processEvent(Container.java:2041)	at java.awt.Component.dispatchEventImpl(Component.java:4652)	at java.awt.Container.dispatchEventImpl(Container.java:2099)	at java.awt.Component.dispatchEvent(Component.java:4482)	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)	at java.awt.Container.dispatchEventImpl(Container.java:2085)	at java.awt.Window.dispatchEventImpl(Window.java:2478)	at java.awt.Component.dispatchEvent(Component.java:4482)	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)	at java.awt.EventQueue.access$000(EventQueue.java:85)	at java.awt.EventQueue$1.run(EventQueue.java:603)	at java.awt.EventQueue$1.run(EventQueue.java:601)	at java.security.AccessController.doPrivileged(Native Method)	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)	at java.awt.EventQueue$2.run(EventQueue.java:617)	at java.awt.EventQueue$2.run(EventQueue.java:615)	at java.security.AccessController.doPrivileged(Native Method)	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)	at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)	at java.awt.Dialog$1.run(Dialog.java:1046)	at java.awt.Dialog$3.run(Dialog.java:1098)	at java.security.AccessController.doPrivileged(Native Method)	at java.awt.Dialog.show(Dialog.java:1096)	at java.awt.Component.show(Component.java:1585)	at java.awt.Component.setVisible(Component.java:1537)	at java.awt.Window.setVisible(Window.java:842)	at java.awt.Dialog.setVisible(Dialog.java:986)	at treinamento.forms.frmPrincipal.jmiFornecedorActionPerformed(frmPrincipal.java:182)	at treinamento.forms.frmPrincipal.access$200(frmPrincipal.java:17)	at treinamento.forms.frmPrincipal$3.actionPerformed(frmPrincipal.java:105)	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)	at java.awt.Component.processMouseEvent(Component.java:6289)	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)	at java.awt.Component.processEvent(Component.java:6054)	at java.awt.Container.processEvent(Container.java:2041)	at java.awt.Component.dispatchEventImpl(Component.java:4652)	at java.awt.Container.dispatchEventImpl(Container.java:2099)	at java.awt.Component.dispatchEvent(Component.java:4482)	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)	at java.awt.Container.dispatchEventImpl(Container.java:2085)	at java.awt.Window.dispatchEventImpl(Window.java:2478)	at java.awt.Component.dispatchEvent(Component.java:4482)	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)	at java.awt.EventQueue.access$000(EventQueue.java:85)	at java.awt.EventQueue$1.run(EventQueue.java:603)	at java.awt.EventQueue$1.run(EventQueue.java:601)	at java.security.AccessController.doPrivileged(Native Method)	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)	at java.awt.EventQueue$2.run(EventQueue.java:617)	at java.awt.EventQueue$2.run(EventQueue.java:615)	at java.security.AccessController.doPrivileged(Native Method)	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)	at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Nilo Souza

Nilo Souza

Responder

Posts

09/07/2011

Robson Teixeira

pelo erro mostrado o problema está no select onde naum devia ter resultado.

revise esse select e teste-o direto na base.

e para retirar a mesagem simplesmente tire a linha q faz uso de log.

espero ter ajudado
att
robson
Responder

Gostei + 0

10/07/2011

Nilo Souza

Esta inserindo normalmente olhe a minha funcão no banco. O problema e que o postgresql fica dando essa mensagem de aviso, mesmo em funções que não retornam valor, ai o java fica mostrando para o usuario ou no console. Como resolvo isso?


CREATE OR REPLACE FUNCTION fn_iad_fornecedor(p_id dm_inteiro, p_nome dm_nome, p_endereco dm_endereco, p_numero dm_inteiro, p_complemento dm_complemento, p_bairro dm_bairro, p_cidade dm_cidade, p_insc_estadual dm_insc, p_telefone dm_telefone, p_email dm_texto, p_usuario dm_inteiro, p_opr dm_opr)
  RETURNS void AS
$BODY$
BEGIN
    PERFORM FN_RESTRICOES(2,P_USUARIO,NULL,P_OPR);
  
IF (P_OPR = 'I') THEN
  
        INSERT INTO FORNECEDOR(NOME,
        NUMERO,
        ENDERECO,
        COMPLEMENTO,
        BAIRRO,
        CIDADE,
        INSC_ESTADUAL,
        TELEFONE,
        EMAIL,
        USUARIO_INCLUI) 
        VALUES(P_NOME,
        P_NUMERO,
        P_ENDERECO,
        P_COMPLEMENTO,
        P_BAIRRO,
        P_CIDADE,
        P_INSC_ESTADUAL,
        P_TELEFONE,
        LOWER(P_EMAIL),
        P_USUARIO);
    
        
ELSEIF (P_OPR = 'U') then
        UPDATE FORNECEDOR SET NOME = P_NOME,
        ENDERECO = P_ENDERECO,
        NUMERO = P_NUMERO,
        COMPLEMENTO = P_COMPLEMENTO,
        BAIRRO = P_BAIRRO,
        CIDADE = P_CIDADE,
        INSC_ESTADUAL = P_INSC_ESTADUAL,
        TELEFONE = P_TELEFONE,
        EMAIL = LOWER(P_EMAIL),
        USUARIO_ALTERA= P_USUARIO
        WHERE IDFORN = P_ID; 
          
ELSEIF (P_OPR= 'D') then
        
        DELETE FROM FORNECEDOR WHERE IDFORN = P_ID;
END IF;
  
END;
$BODY$
  LANGUAGE plpgsql


Responder

Gostei + 0

10/07/2011

Anthony Accioly

Nilo,

Você está fazendo um select em uma função que executa comandos de escrita e retorna void. Isso é errado por n motivos (não é diferente de, por exemplo, fazer uma requisição GET manipular dados e não voltar nada em uma arquitetura REST). O banco está te avisando sobre isso.

Se não me engano em um post anterior aqui no fórum já discuti sobre como chamar funções e Stored Procedures corretamente em Java. Dá uma procurada.

Resumo: Se você usar um CallableStatement (http://download.oracle.com/javase/6/docs/api/java/sql/CallableStatement.html) e o comando call a Exception desaparece. Para obter um CallableStatement, chame connection.prepareCall.

Link com exemplos do commando call: http://www.exampledepot.com/egs/java.sql/callprocedure.html

Abraços,
Responder

Gostei + 0

10/07/2011

Nilo Souza

Meu caro,
de inicio tentei assim, mas deu erro de sintax proximo a {:


public void spaddFornecedor(Fornecedor frn) {         
         
        try {
            String sql = "{ CALL FN_IAD_FORNECEDOR(?,?,?,?,?,?,?,?,?,?,?,?) }";            
            executePrepered(sql,frn.getIdforn(),frn.getNome(),frn.getEndereco(),frn.getNumero(),frn.getComplemento(),frn.getBairro(),
                    frn.getCidade(),frn.getInscEstadual(),frn.getTelefone(),frn.getEmail(),frn.getUsuario(),frn.getOpr());
       
                    
        } catch (FBSQLException fb){
            
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a operação!"+ "\n" + fb,"Restrição de Acesso Firebird", JOptionPane.ERROR_MESSAGE);
        
        
        }
                
        catch(Exception e) {
                      
              
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a operação!"+ "\n" + e,"Restrição de Acesso", JOptionPane.ERROR_MESSAGE);
  
         
        }
    } 

Responder

Gostei + 0

10/07/2011

Nilo Souza

Meu caro,
de inicio tentei assim, mas deu erro de sintax proximo a {:


public void spaddFornecedor(Fornecedor frn) {         
         
        try {
            String sql = "{ CALL FN_IAD_FORNECEDOR(?,?,?,?,?,?,?,?,?,?,?,?) }";            
            executePrepered(sql,frn.getIdforn(),frn.getNome(),frn.getEndereco(),frn.getNumero(),frn.getComplemento(),frn.getBairro(),
                    frn.getCidade(),frn.getInscEstadual(),frn.getTelefone(),frn.getEmail(),frn.getUsuario(),frn.getOpr());
       
                    
        } catch (FBSQLException fb){
            
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a operação!"+ "\n" + fb,"Restrição de Acesso Firebird", JOptionPane.ERROR_MESSAGE);
        
        
        }
                
        catch(Exception e) {
                      
              
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a operação!"+ "\n" + e,"Restrição de Acesso", JOptionPane.ERROR_MESSAGE);
  
         
        }
    } 



Esta é minha classe Genérica

public abstract class GenericaDao {

     private static final long serialVersionUID = 1L;

    public Connection getConnection() {
        try {
            
            
           Class.forName("org.postgresql.Driver");
           Connection cx = DriverManager.getConnection("jdbc:postgresql://localhost:5432/vendas","postgres","pg123");
           return cx;
        } catch (Exception ex) {
            Logger.getLogger(GenericaDao.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

    public Statement getStatement() throws SQLException {
        return getConnection().createStatement();
    }

    public PreparedStatement getPrepared(String st) throws SQLException {
        return getConnection().prepareStatement(st);
    }
    
    
    public CallableStatement getCallableStatement(String st) throws SQLException{
                
        return getConnection().prepareCall(st);
    }
    
   
    public ResultSet executeQuery(String query,Object... params) throws SQLException {
        PreparedStatement ps = getPrepared(query);
        for (int i = 0; i < params.length; i++) {
            ps.setObject(i+1, params[i]);
        }
        return ps.executeQuery();
    }
    
    
    public int executePrepered(String query,Object... params) throws SQLException {
        PreparedStatement ps = getCallableStatement(query);
        for (int i = 0; i < params.length; i++) {
            try {
            ps.setObject(i+1, params[i]);
            } catch (Exception e) {
                System.out.println("Error to try "+i+" with value "+params[i]);
            }
        } 
        int result = ps.executeUpdate();
        ps.close();
        return result;
    }
    

    public int executeCommand(String query,Object... params) throws SQLException {
        PreparedStatement ps = getPrepared(query);
        for (int i = 0; i < params.length; i++) {
            try {
            ps.setObject(i+1, params[i]);
            } catch (Exception e) {
                System.out.println("Error to try "+i+" with value "+params[i]);
            }
        } 
        int result = ps.executeUpdate();
        ps.close();
        return result;
    }

  

}

Responder

Gostei + 0

10/07/2011

Anthony Accioly

Tenta usar call mínusculo e remover os espaços depois do { e antes do }.

Outra coisa, eu usaria um CallableStatement e o método execute.

    public void executeProcedure(String signature, Object... params) throws SQLException {
        CallableStatement cs = getCallableStatement(signature);
        for (int i = 0; i < params.length; i++) {
            try {
                cs.setObject( i + 1, params[i]);
            } catch (Exception e) {
                System.out.println("Error to try " + i + " with value " + params[i]);
            }
        } 
        cs.execute();
        cs.close();
    }


Referência: http://jdbc.postgresql.org/documentation/head/callproc.html
Responder

Gostei + 0

11/07/2011

Robson Teixeira

Nilo eu usuario o metodo mostrado pelo nosso colega Anthony
pois no seu codigo você chama uma função do banco usando o preparedStatment e pelo que sei o PreparedStatement trabalha mais com SQL.

realize seus testes pois acho que ambos estamos curiosos sobre o resultado.

att
 robson
Responder

Gostei + 0

11/07/2011

Nilo Souza

Colega Anthony,muito obrigado vc e o colega Robson, resolvi o problema, funcionou perfeitamente seu método. Um grande abraço.
Responder

Gostei + 0

11/07/2011

Robson Teixeira

OK nilo bacana so não esqueça de fechar o chamado certim???

att
 robson
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar