Gente, me ajudem com o tratamento de exceções, pq ta realmente complicado pra min … Se vcs souberem de algum bom tutorial ou coisa do tipo, me passem o link fazendo favor pq o tutorial daki do fórum não me ajudou mto.
To colando aki trechos de umas classes de um projeto meu e coloquei como comentário as minhas dúvidas.
Vlw!!
Aki só tenho 1 dúvida.Pra q q essa classe foi criada ???
public class ExcecaoEmpregado extends Exception
{ int codigo;
private final static long serialVersionUID = 1L;
public ExcecaoEmpregado (String msg)
{ super(msg);
}
public ExcecaoEmpregado (int codigo, String msg)
{ super(msg);
this.codigo = codigo;
}
public ExcecaoEmpregado ()
{ }
public int getCodigoDeErro()
{ return codigo;
}
}
Classe principal
switch (opcao)
{ case 1:
nome = Console.readLine('\n' + "Digite o nome do empregado: ");
cpf = Console.readLine("Digite o CPF do empregado: ");
salario = Console.readDouble ("Digite o salario do empregado: ");
try
{ int numEmpregado = RepositorioEmpregados.inclui(conn, nome, cpf, salario); // Aqui é onde pode será lançada uma ExecaoEmpregado . //Certo?O erro será lançado se os campos únicos forem duplicados ou //será algum erro no código SQL referente ao método inclui ?
System.out.println('\n' + "Empregado número " + numEmpregado + " incluído com sucesso!");
}
catch (ExcecaoEmpregado e) //Aqui é onde ele será capturado e //tratado, certo ?
{
if (e.getCodigoDeErro() == 1 )
{
System.out.println(e.getMessage()); //Como q esse e.getMessage //vai ser chamado? O método getMessage() é da classe
//ExcecaoEmpregado , afinal até o momento o método getMessage() ainda // não recebeu nenhum parâmetro.Qnd é q ele vai ser inicializado ?
}
else if (e.getCodigoDeErro() == 2 )
{
System.out.println(e.getMessage());
}
else
{
e.printStackTrace();
System.exit(1) ;
}
} break;
public class RepositorioEmpregados
//Aqui eu tenho mtas dúvidas.
{
public static int inclui (Connection conn, String nome, String cpf, double salario)
throws ExcecaoEmpregado // Onde q esse método pode lançar e
// ExcecaoEmpregado ??
{
int pk = 0;
try
{ Statement stmt = conn.createStatement();
String query = "SELECT EMPREGADOS_SEQ.NEXTVAL AS NUMERO FROM SYS.DUAL";
ResultSet rs = stmt.executeQuery(query);
rs.next();
pk = rs.getInt("NUMERO");
stmt.close();
PreparedStatement pstmt = conn.prepareStatement
("INSERT INTO EMPREGADOS (NUMERO, NOME, CPF, SALARIO) " +
"VALUES (?, ?, ?, ?)");
pstmt.setInt (1, pk);
pstmt.setString (2, nome);
pstmt.setString (3, cpf);
pstmt.setDouble (4, salario);
pstmt.executeUpdate();
pstmt.close();
}
catch(SQLException e) //Aqui será tratado algum erro q for gerado pelo //código SQL acima , certo ??
{
if(e.getSQLState().equals(Constantes.VIOLACAO_INDICE_UNICO) ) /
{
if( e.getMessage().toUpperCase().indexOf("EMPREGADOS_NOME_UN")!= -1 )
{
throw new ExcecaoEmpregado(1 ,"Nome duplicado!"); // O que q //acontece aki ??
}
else if ( e.getMessage().indexOf("EMPREGADOS_CPF_UN")!= -1 )
{
throw new ExcecaoEmpregado(2 ,"Cpf duplicado!");
}
else
{
e.printStackTrace();
System.exit(1);
}
}
else
{
e.printStackTrace();
System.exit(1);
}
}
return pk;
}
