Como tratar uma exceção 'General error'?

8 respostas
alomurilo

Obs: criei este tópico no Java Básico mas não tive nenhuma resposta. Espero não estar indo contra alguma regra.

Olá.

Estou querendo tratar uma exceção pra quando o usuário tenta inserir 2 vezes o mesmo CPF, RG ou CNH de um titular.

Eu sei que o erro é esse, mas não sei como deve ser tratado, no console do eclipse só aparece como General Error.

Meu código é esse:

try { if(e.getSource() == btnsave){ if(txtnome.getText().isEmpty()) JOptionPane.showMessageDialog(null, "Nome não pode estar vazio!"); else if(txtrg.getText().isEmpty()) JOptionPane.showMessageDialog(null, "RG não pode estar vazio!"); else if(txtcpf.getText().isEmpty()) JOptionPane.showMessageDialog(null, "CPF não pode estar vazio!"); else if(txtcnh.getText().isEmpty()) JOptionPane.showMessageDialog(null, "CNH não pode estar vazio!"); else{ int i = JOptionPane.showConfirmDialog(null, "Confirma a operação?", "Cadastramento", JOptionPane.OK_CANCEL_OPTION); if (i == JOptionPane.OK_OPTION){ BD.stm.executeUpdate("INSERT INTO titular (nome_titular,rg,cpf,cnh,pontos) VALUES(" + "'" + txtnome.getText() + "', " + txtrg.getText() + ", " + txtcpf.getText() + ", " + txtcnh.getText() + ", 0);"); JOptionPane.showMessageDialog(null, "Informações salvas.");} } }} catch (SQLException e1) { e1.printStackTrace(); JOptionPane.showMessageDialog(null, e1.getMessage()); }}

Obrigado.

8 Respostas

zoren

Seu banco tem alguma restrição nesses campos?

Como você faz para saber se o campo foi inserido duas vezes?

Obs:

Troque o .equals("") por .isEmpty()

E aquelas validações que estão dentro do catch, devem ficar antes de inserir no banco de dados.

alomurilo

Sim, no banco estão todos definidos como ‘NOT NULL’. Mas o java não deveria gerar uma exceção apontando a duplicidade pra eu poder tratá-la?

Com duplicidade ele não insere, gera só um General error, que eu não sei como tratar.

Já testei sem duplicidade e funcionou perfeitamente.

zoren:
Obs:

Troque o .equals("") por .isEmpty()

E aquelas validações que estão dentro do catch, devem ficar antes de inserir no banco de dados.

Obrigado pelas dicas. Sou iniciante. :oops:

zoren

O que diz esse general error?

Você deve tratar a duplicidade de algum jeito, colocando unique nesses campos ou fazendo um select para saber se algum deles existe.

alomurilo

java.sql.SQLException: General error at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source) at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source) at sun.jdbc.odbc.JdbcOdbc.SQLExecute(Unknown Source) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(Unknown Source) at br.aut.multas.FormTitu.actionPerformed(FormTitu.java:230) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Tem como fazer isso no java, ou só pelo banco mesmo?

alomurilo

E como ficaria esse select?

zoren

Bizarro esse general error, achei q era um tipo

Mas enfim, vc já está tratando ele, ele é um SQL Exception, mas tem que descobrir o por que que ele está lançando esse.

Esse Statement que você está usando é novo ou está reaproveitando?

O select pode ser algo como

SELECT * FROM titular WHERE rg = ? OR cpf = ? OR cnh = ?

Aconselho agora a mudar o seu insert e usar PreparedStatement, é bem mais prático

Que banco é esse? e quem é a chave primária?

alomurilo

zoren:
Bizarro esse general error, achei q era um tipo

Mas enfim, vc já está tratando ele, ele é um SQL Exception, mas tem que descobrir o por que que ele está lançando esse.

Esse Statement que você está usando é novo ou está reaproveitando?

O select pode ser algo como

SELECT * FROM titular WHERE rg = ? OR cpf = ? OR cnh = ?

Aconselho agora a mudar o seu insert e usar PreparedStatement, é bem mais prático

Que banco é esse? e quem é a chave primária?

Já mudei pra PreparedStatement, deu um trabalho mas é bem mais prático mesmo. Continua dando erro.

Vou fazer pelo select mesmo e ver se funciona.

O banco é em Access e a chave primária é id_titular, que é gerada automaticamente pelo banco.

alomurilo

Deu certo com o Select. Obrigado, zoren. :smiley:

Criado 15 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 8
Participantes 2