[RESOLVIDO] Qual exception para falha de comunicacao?

Bom dia meus jovens Deuses do java! :smiley:

Gostaria de tratar uma exception para quando meu programa nao conectar ao xampp

este e o banco retornando o erro para ser tratado por quem o chamou :

image

aqui e a classe que chama essa conexao para fazer o insert no banco :

e aqui o botao que chama a insercao, aqui que eu quero tratar esse erro de conexao quando ela falhar:

ate o momento quando ele nao conecta, acontece isso ele nem entra no catch:

em resumo

Botao cadastrar >>>> chama classe cadastro >>>> que chama a classe conexao, retornando a conexao ou o erro >>>> que a classe cadastro insere se for sucesso mas retorna o erro para o botao se a conexao falhar.

Essa classe de conexão tá bem completa,

Pra chamar num método vc faria

ConectaBanco conecta = new ConectaBanco();
void seu metodo (){
conecta.conexao()
   try{
      conecta.executaSQL("sua query aqui");
      conecta.rs.first();
   } catch(Exception e){
      e.printStackTrace();
   } finally {
      conecta.desconecta();
   }
}
1 curtida

Agradeco muito sua ajuda Abner mas eu nao quero copiar codigo :confused: quero mesmo aprender 100% cada linha do que estou fazendo e nessa classe que voce mandou existem coisas que eu nem usei ainda fora o metodo de conexao que essa classe usa apesar de ser o mesmo ele usa uma forma diferente com esse :

System.setProperty(“jdbc.Driver”, driver);

Gostaria mesmo de continuar da logica que estou fazendo pois nao me sinto ainda preparado para mudar a forma que estou fazendo, vai me causar uma confusao terrivel :cold_sweat:

mas eu percebi que voce usou "SQLException " no tratamento do erro no metodo de conexao, ele e usado pra tratar o erro que citei tambem? tentei usar mas me da o seguinte erro:

pelo que entendi seria porque a minha classe esta com um retorno diferente do esperado :

mas quando saio mudando tudo para SQLException, isso acontece na ultima classe que e a de conexao:

Não manda imagem, manda o código.


Não precisa copiar o meu código, mas lê a descrição dos métodos, vai te fazer entender melhor.

Ao invés de jogar o try catch da conexão pra dentro do método, porquê não deixa dentro da classe de conexão mesmo? O código vai ficar bem mais legivel.

Não precisa passar todos as variaveis pra dentro do método, deixa elas como globais (fora do método).

Sobre o erro que você falou, se você joga o Exception, você captura todos os erros, independente se for SQL, Null, IO, FileNotFound... enfim, pega todos.

Agora se você usa SQLException, você está querendo capturar apenas o erro do SQL, se quiser usar o Class.forName, tem que usar setar o ClassNotFoundException.

Percebi tbm que vc está usando static pra tudo, cuidado com o uso dele, pode prejudicar a memória da sua aplicação.

Se você usar o

try

catch

não é necessário o uso do throws
e vice-versa.

2 curtidas

Gratissimo por tudo inclusive tirei o static de alguns pontos e utilizei o try catch na conexao :

image

Agora so nao entendi quando voce disse :

Agora se você usa SQLException , você está querendo capturar apenas o erro do SQL, se quiser usar o Class.forName, tem que usar setar o ClassNotFoundException .

poderia explicar melhor? como eu faco isso?

Amigo, manda o código por gentileza, não manda a imagem.

Se você está esperando um retorno de um erro relacionado ao banco de dados, geralmente se usa o SQLException, até o erro de que não foi possivel estabelecer uma conexão com o banco.

Agora vamos usar seu exemplo, você quer usar o Class.forName();, nossas IDE’s são inteligentes, elas já supõem que se você for usar esse método, você pode ter um erro de classe não encontrada, exemplo, você setou driver, pode acontecer de isso nem existir, então seu programa ia crashar e você nem saberia o porquê. Então você precisa usar a exception ClassNotFoundException.

Aí você pode fazer assim:

try {
   //...
} catch (SQLException e) {
  e.printStackTrace();
} catch (ClassNotFoundException e){
  e.printStackTrace();
}

Ou fazer um multi-catch:

} catch (SQLException | ClassNotFoundException  e) {
  e.printStackTrace();
}

Alertando sobre o uso do throws novamente, ou você usa o throws ou usa o try catch!

void metodo(){
   try
      ...
   catch
}

ou

void metodo throws Exception(){
   ...
}
1 curtida

Desculpa, mandarei o codigo em uma proxima vez! :smiley:

Agradecido ajudou bastante no meu problema inclusive gostei muito do multi-catch nunca tinha o visto, me poupou algumas linhas de codigo e isso e sempre bem vindo rs, vllw Abner <3