Necesito comprobar si una excepción es causada por algún problema en la base de datos. Recibo una excepción y compruebo si su causa contiene la cadena "ORA" y la devuelvo (algo así como "ORA-00001"). El problema aquí es que la excepción que recibo está anidada dentro de otras excepciones, por lo que si no averiguo si se trata de una excepción de Oracle, debo verificar la causa de esa excepción y demás. ¿Hay alguna manera más clara de hacerlo? ¿Hay alguna forma de conocer la primera causa (la excepción anidada profunda) de una excepción dada?Java: busque la primera causa de una excepción
Mi código actual es el siguiente:
private String getErrorOracle(Throwable e){
final String ORACLE = "ORA";
if (e.getCause() != null && e.getCause().toString().contains(ORACLE)){
return e.getCause().toString();
} else if(e.getCause() != null){
return getErrorOracle(e.getCause());
} else {
return null;
}
}
Gracias. Creo que iré de esta manera entonces. Tengo que hacer esto porque el cliente quiere mostrar algunos mensajes específicos cuando la excepción es causada por algún problema relacionado con la base de datos. Cuando recibo la excepción, no sé si fue causada por la base de datos, ya que la primera excepción está anidada dentro de la cadena de excepciones, así que estaba buscando una manera de resolver esto. – Averroes
ehm, su método es recursivo, por lo tanto, obtendrá la causa raíz. – Bozho
@Bozho - Tiene tres declaraciones if con devoluciones. Si lo llamara de nuevo, sería recursivo, pero necesitaría cambiar su lógica para que salga. –