GUJ DiscussĂ”es   :   Ășltimos tĂłpicos   |   categorias   |   GUJ Respostas

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