DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Easy Java Magazine
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!

Exceções em Java - Revista easy Java Magazine 7

Criação, lançamento, captura e tratamento de exceções em Java. Criação de exceções como extensões da classe Exception e uso de blocos Try-Catch-Finally, bem como o lançamento de exceções através do comando Throw.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?





Easy Java Magazine 7

[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]

> Clique aqui para ler todos os artigos da Easy Java Magazine 7


Algumas linguagens de programação, inclusive a linguagem Java, trazem mecanismos de controle e manipulação de falhas. Elas permitem que o desenvolvedor crie códigos simples para lançar e tratar falhas geradas em tempo de execução. Esses problemas podem ser, por exemplo, problemas de hardware, recursos (arquivos, banco de dados) que não puderam ser manipulados ou apresentaram algum problema durante o processo de utilização ou, como também, antigos bugs conhecidos por programadores do mundo todo. Pensando nisso, este artigo será responsável por descrever e explicar todo o funcionamento dessa ferramenta tão poderosa para controle de falhas na linguagem Java.

O que é uma Exceção?

Exceções são problemas que ocorrem e provocam a interrupção do fluxo normal do programa. Situações adversas e diferentes do que o programa está esperando como resultado. Para tratar essas situações, temos os manipuladores de exceções. A ideia é passar o fluxo de controle, uma vez interrompido por uma exceção, para um código que será responsável por manipular e procurar uma alternativa a um código que não pode ser executado por completo. Por exemplo, um método para ser executado precisa abrir um arquivo em disco e ler algumas informações. Por algum motivo, o método não conseguiu abrir esse arquivo e não pode ser executado, assim o programa para a execução, mas temos que ter uma saída e a saída é um manipulador de exceção.

Problemática

Antes de mostrar o uso e aplicabilidade de exceções, vamos exemplificar com um problema simples que ocorre sistematicamente no desenvolvimento de software. Chamamos aqui de Problema do Saldo Negativo. O problema consiste em não deixar com que um débito em conta-corrente seja maior que o valor do saldo atual da conta. Caso o débito seja realizado, o correntista ficará com o saldo negativo, mas ele não tem cheque especial e com isso o sistema deve ser alertado de alguma forma. Na Listagem 1 pode ser visto um código que possui o problema.

 

Listagem 1. Classe Conta e método debitar().

public class Conta {

  private String numero;

  private double saldo;

  ...

  public void debitar(double valor) {

    saldo = saldo - valor;

  }

}

 

O método debitar() faz o débito do valor passado como parâmetro na variável saldo, mas não faz nenhum tipo de alerta ou filtragem, isto é, o débito sempre ocorre. Essa situação seria a primeira solução para o débito em conta corrente, sem nenhum tipo verificação de valores. Vejamos agora, na Listagem 2, uma possível solução onde é utilizada uma condição.

 

Listagem 2. Solução 1 para o método debitar().

public class Conta {

  private String numero;

"

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Easy Java Magazine
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Thiago José Marques Moura
é professor efetivo do IFPB Campus João Pessoa, leciona disciplinas de desenvolvimento Web em Java, mestrado em Inteligência Artificial pela UFPE e possui as certificações SCJP 1.4 e SCWCD 5.
O que você achou deste post?

    6 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Nilo Souza
Muito proveitoso. Mas daria a sugestão para de modo mais pratico ensinar como tratar as os erros do banco de dados. No firebird coloquei uma exception na procedure quando o usuário nao tem acesso. Como faço para que no netbeans esse erro seja tratado e mostra uma mensagem amigavel?
[há +1 ano] - Responder

 

[autor] Thiago José Marques Moura
Olá Nilo! Obrigado pelos comentários! A idéia foi um artigo sobre Exceptions básicos, sem misturar com banco de dados! Sobre tua dúvida, era bom colocar o código para ver como poderíamos alterar e melhorá-lo!
[há +1 ano] - Responder
 

Nilo Souza
OK, abaixo o meu codigo. Como faço para mostrar uma mensagem bem formatada para ao usuario, quando a senha ou login estiverem errados?
Minha procedure

CREATE OR ALTER PROCEDURE SP_VALIDA_USUARIO (
PLOGIN DM_LOGIN,
PSENHA DM_SENHA )

AS
DECLARE VARIABLE vCOUNT DM_INTEIRO;
BEGIN

IF (NOT EXISTS(SELECT LOGIN FROM USUARIO WHERE LOWER(LOGIN) = LOWER(:PLOGIN))) THEN

exception e_login;

ELSE IF (NOT EXISTS (SELECT SENHA FROM USUARIO WHERE LOWER(LOGIN) = LOWER(:PLOGIN) and
LOWER(SENHA) = LOWER(:PSENHA)))THEN

exception e_senha;

END

------------------

MEU METODO CHAMANDO A PROCEDURE:

public void validaUsuarioLogin(String strLogin, String strSenha) {

String query = "{ call SP_VALIDA_USUARIO(?,?) }";
try {
executePrepered(query,strLogin,strSenha);
} catch (SQLException ex) {

Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);


}

}

-----------------------
MEU CODIGO NO BOTÃO ACESSAR DO FORMULARIO
private void btnAcessarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

dao.validaUsuarioLogin(txtUsuario.getText(), txtSenha.getText());

setVisible(false);
new frmPrincipal().setVisible(true);
}

----------------------------
MEU STACK TRACE NO NETBEANS:

11/06/2011 12:37:40 treinamento.forms.frmLogin btnAcessarActionPerformed
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544517. exception 5
E_SENHA
Senha inexistente
At procedure 'SP_VALIDA_USUARIO' line: 17, col: 84
at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:730)
at org.firebirdsql.jdbc.AbstractCallableStatement.internalExecute(AbstractCallableStatement.java:435)
at org.firebirdsql.jdbc.AbstractCallableStatement.executeUpdate(AbstractCallableStatement.java:341)
at treinamento.dao.GenericaDao.executePrepered(GenericaDao.java:72)
at treinamento.dao.UsuarioDao.validaUsuarioLogin(UsuarioDao.java:30)
at treinamento.forms.frmLogin.btnAcessarActionPerformed(frmLogin.java:165)
at treinamento.forms.frmLogin.access$000(frmLogin.java:23)
at treinamento.forms.frmLogin$1.actionPerformed(frmLogin.java:59)
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.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)




[há +1 ano] - Responder
 

[autor] Thiago José Marques Moura
Olá Nilo!

Você pode dentro do método validaUsuarioLogin(), no catch(SQLException ex), colocar uma mensagem para o usuário aí dentro mesmo, abaixo da linha Logger.getLogger(), ou se preferir, crie uma nova exceção e lance-a logo abaixo da linha Logger.getLogger(), para isso, deve-se envolver com try catch a linha dao.validaUsuarioLogin() no método btnActionPerformed() e no catch, colocar a mensagem para o usuário.
[há +1 ano] - Responder
 

Nilo Souza
Para fazer essa mensagem eu teria que usar o jOptionPane.
Essa é minha camada Dao, não é o formulário.
[há +1 ano] - Responder
 

Dyego Souza Do Carmo
Sua Sp não esta recebendo o parametro correto , tentou debugar utiliza gdi ?
[há +1 ano] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03