Try-catch eh para tratar erros sim, mas o que vc fez foi ignorar os erros, ao inves de lidar com ele.
Quando uma exception ocorre no sistema, a exeucacao para no ponto do erro, caso nao haja um tratamento. Porem, quando vc faz
try {
// codigo
}
catch (Exception e) {
System.out.println("ocorreu um erro");
}
// resto do programa
voce estara apenas mostrando na tela a mensgem “ocorreu um erro”, porem, como vc nao “relanca” a exception, ou nao faz algum outro tipo de logica, a execucao ira continuar, indo para o “resto do programa”.
O correto, no teu caso, seria fazer assim:
...
public Connection getConnection() {
Connection conn = null;
try {
Class.forName(...);
conn = DriverManager.getConnection(....);
}
catch (Exception e) {
e.printStackTrace();
// 1) Simplesmente mostre a msg de erro e depois trate a conexao nula em outro lugar:
System.out.println("Erro: " + e):
// 2) OU vc pode relancar a exception, fazendo com que o programa - ou ao menos o metodo atual - pare de executar:
throw new RuntimeException(e);
}
// Se chegou aqui, e se vc fez o passo 2 ao inves do 1, voce tera uma conexao valida
return conn;
}
ai, no teu metodo inserir(), vc faz assim:
...
Connection conn = getConnection();
// O correto: verificar se vc tem uma conxao mesmo
if (conn != null) {
// trabalhe com ela
}
else {
// nao tenho uma conexao.. mostrar msg erro etc
}
...
Rafael