Fórum Tirar mensagem de retorno do postgresql #404699
09/07/2011
0
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
Curtir tópico
+ 0Posts
09/07/2011
Robson Teixeira
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
Gostei + 0
10/07/2011
Nilo Souza
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
Gostei + 0
10/07/2011
Anthony Accioly
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,
Gostei + 0
10/07/2011
Nilo Souza
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);
}
}
Gostei + 0
10/07/2011
Nilo Souza
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;
}
}
Gostei + 0
10/07/2011
Anthony Accioly
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
Gostei + 0
11/07/2011
Robson Teixeira
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
Gostei + 0
11/07/2011
Nilo Souza
Gostei + 0
11/07/2011
Robson Teixeira
att
robson
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)