Clase Java SQLException
La clase SQLException y sus subtipos proporcionan información acerca de los errores y avisos que se producen mientras se está accediendo a un origen de datos.
A diferencia de la mayor parte de JDBC, que se define mediante interfaces, el soporte de excepciones se suministra en clases. La clase básica para las excepciones que se producen durante la ejecución de aplicaciones JDBC es SQLException. Todos los métodos de la API JDBC se declaran capaces de lanzar SQLExceptions. SQLException es una ampliación de java.lang.Exception y proporciona información adicional relacionada con las anomalías que se producen en un contexto de base de datos. Específicamente, en una SQLException está disponible la siguiente información:
- Texto descriptivo
- SQLState
- Código de error
- Una referencia a las demás excepciones que también se han producido
ExceptionExample es un programa que maneja adecuadamente la captura de una SQLException (esperada, en este caso), y el vuelco de toda la información que proporciona.
Como se ha indicado, los objetos SQLException se lanzan cuando se producen errores. Esta afirmación es correcta, pero es incompleta. En la práctica, el controlador JDBC nativo rara vez lanza SQLExceptions reales. Lanza instancias de sus propias subclases SQLException. Esto permite al usuario determinar más información acerca de lo que realmente ha fallado, como se indica a continuación.
DB2Exception.java
Los objetos DB2Exception no se lanzan directamente. Esta clase básica se utiliza para contener las funciones que son comunes a todas las excepciones JDBC. Existen dos subclases de esta clase que son las excepciones estándar que lanza JDBC. Estas subclases son DB2DBException.java y DB2JDBCException.java. Las DB2DBExceptions son excepciones de las que se informa al usuario que provienen directamente de la base de datos. Las DB2JDBCExceptions se lanzan cuando el controlador JDBC detecta problemas por su cuenta. Dividir la jerarquía de clases de excepción de esta forma permite manejar los dos tipos de excepciones de forma distinta.
DB2DBException.java
Como se ha indicado, las DB2DBExceptions son excepciones que provienen directamente de la base de datos. Se detectan cuando el controlador JDBC efectúa una llamada a CLI y obtiene un código de retorno SQLERROR. En estos casos, se llama al SQLError de la función CLI para obtener el texto del mensaje, SQLState, y el código del proveedor. También se recupera y se devuelve al usuario el texto de sustitución del SQLMessage. La clase DatabaseException provoca un error que la base de datos reconoce e indica al controlador JDBC que cree el objeto de excepción para el mismo.
DB2JDBCException.java
Las DB2JDBCExceptions se generan para condiciones de error que provienen del propio controlador JDBC. El funcionamiento de esta clase de excepciones es fundamentalmente diferente; el propio controlador JDBC maneja la conversión de lenguaje del mensaje de la excepción y otras cuestiones que el sistema operativo y la base de datos manejan en el caso de las excepciones que se originan en la base de datos. Siempre que es posible, el controlador JDBC se ajusta a los SQLStates de la base de datos. El código de proveedor para las excepciones que lanza el controlador JDBC es siempre -99999. Las DB2DBExceptions reconocidas y devueltas por la capa CLI también tienen con frecuencia el código de error -99999. La clase JDBCException provoca un error que el controlador JDBC reconoce y crea la excepción por su cuenta. Durante el desarrollo de este release, se ha creado la siguiente salida. Observe que, al principio de la pila, se encuentra DB2JDBCException. Esto indica que se está informando del error desde el controlador JDBC antes de efectuar la petición a la base de datos.