Colecao de negocio

15 respostas
V
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.
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;
	}

15 Respostas

ederfreitas

Só não retornar null no método que você busca no banco, retorne new NomeDoObjeto e trate de acordo com sua necessidade.

V

Pessoal preciso de um exemplo não consigo visualizar como resolver o problema agradeço…

laudenpower
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.
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;
	}

Tenta acessar alguma coisa do teu objeto instituicao logo após realizar a consulta dentro desse método.

drigo.angelo

quem é esse r :?:

V

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.

T

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 ();
V

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.

ederfreitas

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

T

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.

V

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.

V

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());
		
	}

}
T

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:

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;  
    }
}
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
    }
}
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());  
          
    }  
  
}
V

blz essa instancia de outra classe que estou chamando na verdade é uma interface chamada

IrepositorioInstituicao r = new RepositorioInstituicao() que implementa a minha interface.

T

Blz, editei o post com os nomes das classes corretas.
Bem, acho que a solução que eu dei resolve. Ou não?

carlos.e.a

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.

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.

Criado 4 de março de 2011
Ultima resposta 11 de mar. de 2011
Respostas 15
Participantes 6