Esse método meu nunca lança a minha exceção quando não encontra o meu registro no banco de dados
ele sempre dá NULLPOINTEXCEPTION eu sei q isso ocorre pq o meu objeto retornado tá sendo nulo
quando ele não encontra nada então como posso resolver.
[code]
public Instituicao consultarInstituicao(String Identificador) {
Instituicao instituicao = new Instituicao();
try {
instituicao = r.consultarInstituicao(Identificador);
} catch (InstituicaoInexistenteException e) {
System.out.println("Instituição não registrada");
}
return instituicao;
}[/code]
Só não retornar null no método que você busca no banco, retorne new NomeDoObjeto e trate de acordo com sua necessidade.
Pessoal preciso de um exemplo não consigo visualizar como resolver o problema agradeço…
[quote=vinkello]Esse método meu nunca lança a minha exceção quando não encontra o meu registro no banco de dados
ele sempre dá NULLPOINTEXCEPTION eu sei q isso ocorre pq o meu objeto retornado tá sendo nulo
quando ele não encontra nada então como posso resolver.
[code]
public Instituicao consultarInstituicao(String Identificador) {
Instituicao instituicao = new Instituicao();
try {
instituicao = r.consultarInstituicao(Identificador);
} catch (InstituicaoInexistenteException e) {
System.out.println("Instituição não registrada");
}
return instituicao;
}[/code]
[/quote]
Tenta acessar alguma coisa do teu objeto instituicao logo após realizar a consulta dentro desse método.
Se os objetos existirem no banco ele retorna pessoal tudo q eu pedi. O problema é quando o objeto não existe no banco
ao invés dele lançar minha exceção eu só consigo lançar null ou nullpoint e o que eu quero é que ele lance a minha mensagem.
No método consultarInstituicao, se o registro não existir, ao invés de retornar null, lance a exceção. Como o código abaixo:
throw new InstituicaoInexistenteException ();
Mais dessa forma eu não estou tratando a exceção to jogando ela pra cima pra ser tratada em uma camada acima
e o que eu quero é trartar a exceção com try e catch.
Fiooo tá certo isso, olha só
consultarInstituicao(int codigo){
try{
//Instancia sua classe controladora que contém a regra de negócio, ou seja chama o método que conecta no banco e faz o select
}catch(InstituicaoInexistenteException e){
System.out.println(e.getMessage());
}
}
[]'s
Amigo,
Da forma que eu falei você estaria tratando a exceção corretamente sim.
O método r.consultarInstituicao seria o responsável por identificar que não existe o registro e lançaria a exceção, para que o método consultarInstituicao pegasse e tratasse a exceção.
Mas dessa forma amigo toda vez q eu for chamar o método consultar eu tenho q colocar uma claúsla try catch pra resolver o problema.
Meu teste.
public class Teste1 {
public static void main(String[] args) {
Instituicao i = new Instituicao();
ColecaoInstituicao co = new ColecaoInstituicao();
i=co.consultarInstituicao("EMFT");
System.out.println(i.getNome());
}
}
Pelo que eu entendi você possui duas classes que possuem o método chamado consultarInstituicao. Certo?
Você realiza a consulta utilizando o método da classe ColecaoInstituicao, e este chama o consultarInstituicao da outra classe (instância r do seu exemplo).
Se eu entendi bem o que você quer, poderia ficar assim:
[code]public class ColecaoInstituicao {
private IRepositorioInstituicao r = new RepositorioInstituicao();
public Instituicao consultarInstituicao(String Identificador) {
try {
return r.consultarInstituicao(Identificador);
} catch (InstituicaoInexistenteException e) {
System.out.println("Instituição não registrada");
}
return null;
}
}[/code]
[code]public class RepositorioInstituicao implements IRepositorioInstituicao {
public Instituicao consultarInstituicao(String Identificador) throws InstituicaoInexistenteException {
// Busca a Instituicao, se não achar lança a exceção como abaixo
throw new InstituicaoInexistenteException();
// Se achar retorna-a
}
}[/code]
[code]public class Teste1 {
public static void main(String[] args) {
ColecaoInstituicao co = new ColecaoInstituicao();
Instituicao i = co.consultarInstituicao("EMFT");
if ( i != null ) // Se retornar null eu sei que a Instituicao não foi achada
System.out.println(i.getNome());
}
} [/code]
blz essa instancia de outra classe que estou chamando na verdade é uma interface chamada
IrepositorioInstituicao r = new RepositorioInstituicao() que implementa a minha interface.
Blz, editei o post com os nomes das classes corretas.
Bem, acho que a solução que eu dei resolve. Ou não?
[quote=vinkello]Mais dessa forma eu não estou tratando a exceção to jogando ela pra cima pra ser tratada em uma camada acima
e o que eu quero é trartar a exceção com try e catch.[/quote]
Naturalmente voce vai ter que joga-la pra cima se quer captura-la em um metodo chamador, como é o caso. Voce joga pra cima no metodo consultarInstituicao e captura no seu main.
Agora se voce nao quiser tratar toda vez que chama esse metodo, que é o que esta parecendo, voce pode fazer o seguinte:
Em vez de ter aquele catch(InstituicaoInexistenteException e) voce ter um catch(NullPointerException e).
Agora eu te adianto logo que isso vai resolver o teu problema, mas nao é uma boa pratica, pois se voce sabe que o teu metodo PODE lançar uma exceçao desse tipo, o mais adequado é fazer como o pessoal falou, de fazer um throw. Assim qualquer metodo que chama-lo vai ser obrigado a tratar a exceção.