Problema não muito usual com try catch

Pessoal,

Segue abaixo um trecho do meu codigo


	public void incluir(Filme filme) throws FilmeException {

		Connection conn = null;
		PreparedStatement prestmt = null;
		
		try {
			conn = conexao.getConexao();
                        prestmt = conn.prepareStatement(Incluir_Filme);
			prestmt.setString(1, filme.getFilmeTitulo());
                        
			prestmt.executeUpdate();
		
		} catch (SQLException e) {
			FilmeException.imprimeErro(e, "Nao foi possivel incluir o filme");
		} catch (FilmeException e) {
			e.printStackTrace();
		} 
                finally {
            conexao.closeAll(conn, prestmt);
		}
	}

O erro reportado é o seguinte:

C:\Ambiente\Java\Prj\Catalogo\src\java\br\com\catalogo\db\FilmeDb.java:42: exception br.com.catalogo.exception.FilmeException is never thrown in body of corresponding try statement

                } catch (FilmeException e) {

C:\Ambiente\Java\Prj\Catalogo\src\java\br\com\catalogo\db\FilmeDb.java:34: unreported exception br.com.catalogo.conexao.ConexaoException; must be caught or declared to be thrown

                        conn = conexao.getConexao();

Posso uma outra classe para trabalhar comente com as excessoes:


package br.com.catalogo.exception;

/**
 *
 * @author Compaq
 */
public class FilmeException extends Exception{

    public FilmeException (String mensagem, Exception e) 
    {
        super(mensagem, e);
    }
    public FilmeException (String mensagem) 
    {
        super(mensagem);
    }
    public static void imprimeErro(Exception e, String mensagem) 
    {
        System.out.println("==============Exception===============");
        System.out.println(mensagem);
        System.out.println("PrintStackTrace: ");
        e.printStackTrace();
        System.out.println("============End Exception=============");
    }
    public void print() 
    {
        System.out.println("==============Exception===============");
        System.out.println(getMessage());
        System.out.println("PrintStackTrace: ");
        getCause().printStackTrace();
        System.out.println("============End Exception=============");
    }
}

O Estranho é que possuo meus blocos de try catch bem definidos e mesmo assim ele critica dizendo que eu nao trabalhei com try catch ou nunca utilizei o tal do try catch

Bom gostaria de alguma opiniao .

Grato

Fabio Nascimento

No primeiro erro, indica que você está tentando capturar uma ‘FilmeException’ que nunca será lançada no seu bloco try.

No segundo, indica que o método getConexao() está lançando uma ConexaoException que você não está tratando.

[quote=Rafael Nunes]No primeiro erro, indica que você está tentando capturar uma ‘FilmeException’ que nunca será lançada no seu bloco try.

No segundo, indica que o método getConexao() está lançando uma ConexaoException que você não está tratando.[/quote]

Tem azao Rafael n o caso da FilmeException eu nunca iria ter essa excessao mesmo, mas no caso da conexao, estou tratando todos possiveis erros lá

como seque abaixo:


    public static Connection getConexao() throws ConexaoException {
		Connection conn = null;
		
		try {
			
			Class.forName(Str_Driver);
			conn = DriverManager.getConnection(Str_Conexao, Str_Usuario, Str_Senha);
			System.out.println("[ConnectionManager]: Obtendo conexao");
			return conn;		
			
		} catch (ClassNotFoundException e) {
			
			String errorMsg = "Driver nao encontrado";
            throw new ConexaoException(errorMsg, e);
            
		} catch (SQLException e) {
			
			String errorMsg = "Erro ao obter a conexao";
            throw new ConexaoException(errorMsg, e);
            
			}
	}
Ainda tenho mais varios metodos a seguir

public static void closeAll (Connection conn)
{...}
public static void closeAll(Connection conn, Statement stmt)
{...}
public static void closeAll(Connection conn, Statement stmt, ResultSet rs)
{...}

Não consigo identificar qual tipo de excessao eu não estou tratando.

Valeu pela ajuda cara, já esclareceu alguns itens que devo reconsiderar.

Fabio Nascimento

Quando você chama getConexao() dentro do método incluir, ela pode lançar a exceção ConexaoException. É isso que você tem de tratar.

Ou captura com um bloco catch:

}catch(ConexaoException ce){ ... }

Ou na declaração do método incluir informa que ele pode lançar uma ConexaoExcpetion(que em algum momento você vai ter de tratar:

public void incluir(Filme filme) throws ConexaoException

Rafael,

Muitissimo obrigado.

Suas respostas me valeram outros pensamentos quanto minha implementação.

Como eu quis separar do meu codigo todos os exceptions possiveis, acabei me perdendo em algum…

Mas resolvi, eu acabo repassando todos meus erros para suas devidas classesExceptions que por sua vez repassam para as Exceptions reais.

Valeu cara, resolvi meu problema, e com certeza vou te validar como otimo e prestativo (estrelinhas !!!****)

Té +

Fabio Nascimento