Você está na página 1de 8

EXCEPCIONES

QU ES UNA EXCEPCIN?
Una excepcin es una situacin anmala a la que llega la ejecucin de un
programa. Estas situaciones anmalas pueden ser desde el intento de abrir un
fichero que no existe, a la divisin por cero. Java proporciona un mecanismo
para detectar y solucionar las excepciones que se puede llegar a producir
durante la ejecucin de un programa. En Java estamos obligados a tratar las
excepciones cuando se producen, bien gestionndolas directamente o bien
desentendindonos de ellas, pero hasta esto ltimo debemos hacerlo
explcitamente.
TIPOS DE EXCEPCIONES
En Java existen dos grandes tipos de excepciones: los Errores y las
Excepciones propiamente dichas.
Los Errores son situaciones irrecuperables, por ejemplo fallos de la mquina
virtual. Ante ellos no hay ms alternativa que cerrar la aplicacin, y no estamos
obligados a gestionarlas. Las excepciones son situaciones anmalas ante las
cuales bien debemos reaccionar o bien nos desentendemos. Cuando una
excepcin se produce se acompaa de toda la informacin relevante para que
podamos gestionarla
Throwable
Es la clase que agrupa todas las excepciones que podemos utilizar en nuestra
aplicacin hecha en Java e inclusive si queremos crear nuestro propio tipo de
excepcin podemos hacerlo al heredar de la clase Exception o de alguna de
sus sub-clases.

Lo que podemos destacar en el grfico es que tenemos dos subtipos grandes


de las excepciones, las excepciones como tal y los errores, dentro de cada
uno de estos tenemos diferentes clases y cada clase puede tener ms
excepciones como es el caso de la clase RuntimeException que vemos en la

imagen
que
posee,
las
excepciones
ms
comunes
como
la ArithmeticException que es obtenida cuando hay un problema con una
operacin aritmtica.
GESTIN DE EXCEPCIONES
Toda sentencia susceptible de lanzar una excepcin debe ir en un bloque
try{...}. Si se lanza la excepcin, la ejecucin se abandonar en la sentencia
que la lanz y se ejecutar el bloque catch(Exception e) {...} que atrape la
excepcin generada.
BLOQUE TRY
Try en ingls es el verbo intentar, as que todo el cdigo que vaya dentro de
esta sentencia ser el cdigo sobre el que se intentar capturar el error si se
produce y una vez capturado hacer algo con l. Lo ideal es que no ocurra un
error, pero en caso de que ocurra un bloque try nos permite estar preparados
para capturarlo y tratarlo. As un ejemplo sera:
try {
System.out.println(bloque de cdigo donde pudiera saltar un
error es este);
}
BLOQUE CATCH
En este bloque definimos el conjunto de instrucciones necesarias o de
tratamiento del problema capturado con el bloque try anterior. Es decir, cuando
se produce un error o excepcin en el cdigo que se encuentra dentro de un
bloque try, pasamos directamente a ejecutar el conjunto de sentencias que
tengamos en el bloque catch. Esto no es exactamente as pero ya
explicaremos ms adelante todo el funcionamiento. De momento para una
mejor comprensin vamos a considerar que esto es as.
catch (Exception e) {
System.out.println(bloque
problema);
}

de

cdigo

donde

se

trata

el

Fjate que despus de catch hemos puesto unos parntesis donde pone
Exception e. Esto significa que cuando se produce un error Java genera un
objeto de tipo Exception con la informacin sobre el error y este objeto se enva
al bloque catch.
BLOQUE FINALLY
Y para finalizar tenemos el bloque finally que es un bloque donde podremos
definir un conjunto de instrucciones necesarias tanto si se produce error o
excepcin como si no y que por tanto se ejecuta siempre.

finally {
System.out.println(bloque de cdigo ejecutado siempre);
}
Ejemplo:
Try{
readFromFile(esteFicheroNoExiste);
}
catch(FileNotFoundException e) {
//Aqu tratamos esta excepcin
}
catch(IOException e) {
//Aqu tratamos esta otra
}
finally {
//Aqu realizamos las tareas comunes.
}
Si el fichero del que se pretende leer no existe, se lanza una excepcin del tipo
FileNotFoundException que atrapamos en el bloque catch correspondiente. En
la jerarqua de las clases excepcin, FileNotFoundException hereda de
IOException que a su vez hereda de Exception que es la raz de esta jerarqua;
por lo tanto los bloques catch deben aparecer de mayor a menor profundidad
en la jerarqua, ya que de lo contrario como un FileNotFoundException es un
IOException, la excepcin quedara atrapada en este bloque

JDBC(Java Data Base Connectivity)


JDBC es la API que permite la conexin de un programa Java y una base de
datos relacional. Se encuentra dentro del paquete java.sql.
Incluye clases e interfaces que permiten el acceso a la bases de datos para
ejecutar consultas, actualizaciones, ejecutar procedimientos, etc.
CLASE / INTERFACE

FUNCIN

Clase DriverManager

Establece la conexin con la base de datos

Interface Conection

Representa una conexin con la BD

Interface Statement

Ejecucion de consultas SQL

Interface

Ejecucion de consultas preparadas y procedimientos


almacenados

Interface
ResultSetMetadata

Proporciona informacin sobre la estructura de los


datos

Algunas de las clases e interfaces de JDBC son:

El objetivo de las interfaces de JDBC es definir como trabajar con la base de


datos: como establecer la conexin, como ejecutar una consulta, etc.
Para poder ejecutar nuestro
implementen estas interfaces.

programa

necesitamos

las

clases

que

Driver JDBC
Llamamos driver al conjunto de clases que implementan las interfaces
JDBC
El driver proporciona la comunicacin entre la aplicacin Java y la base de
datos

Cada tipo de bases de datos (Oracle, MySQL, PostGreSQL, etc) tienen su


propio driver.

Los drivers los proporcionan los fabricantes de las bases de datos.


Normalmente se descarga desde la pgina web del fabricante.
ACCESO A BASES DE DATOS CON JDBC
Una vez incorporado el driver como librera de la aplicacin, se deben seguir
los siguientes pasos para acceder a una base de datos:
1. Importar los paquetes:
Normalmente es suficiente con la sentencia import java.sql.*;
2. Cargar el driver:
El driver se debe cargar para poder utilizarlo. Esto lo realiza el mtodo
estticoforName() de la clase Class.
Class.forName(String driver);
Driver JDBC para MySQL:
Class.forName("com.mysql.jdbc.Driver");
Lanza una excepcin ClassNotFoundException
3. Crear la conexin:
Esto
lo
realiza
clase DriveManager.

el

mtodo

esttico getConnection() de

la

DriverManager.getConnection(String url);
url es un String que nos permite localizar la base de datos. Normalmente se
compone de tres campos:
jdbc:tipoBD:datos_de_conexion
Para MySQL, el formato es:
"jdbc:mysql://ordenador_donde_est_la_base_de_datos/base_de_dato
s".
Deberemos indicar el nombre o IP del ordenador en el que se encuentra el
servidor de base de datos y a continuacin el nombre de la base de datos.
Una sobrecarga del mtodo getConnection acepta, adems de la url, el usuario
y contrasea de la base de datos.
Este mtodo devuelve un objeto que implementa la interfaz Connection.
Por ejemplo, si tenemos corriendo en nuestro ordenador el servidor de bases
de datos, y nos queremos conectar a una base de datos llamada prueba que
tiene un usuario root y contrasea 1daw escribiremos:
Connection

conexion
=DriverManager.getConnection("jdbc:mysql://localhost/
prueba","root",
"1daw");

4. Ejecutar una consulta:


Las consultas se
interfaceStatement.

manejan

mediante

un

objeto

que

implementa

la

Antes de poder ejecutar una consulta debemos crear el objeto. El objeto se


crea utilizando el mtodo createStatement() de Connection.
Statement s = conexion.createStatement ();
Una vez creado podemos utilizar algunos de los mtodos de Statement para
enviar la consulta a la BD.
Algunos de estos mtodos son:
Boolean execute(String sentenciaSQL);

Si es una consulta de accin (Insert, Delete,


Update) devuelve false indicando que no se
generan resultados. Si es una consulta de
seleccin (Select) devuelve true.

int execute(String setenciaSQL);

Enva una consulta de accin. Devuelve el


nmero de registros afectados por dicha accin.

ResultSet
sentenciaSQL);

Enva una consulta de seleccin. Devuelve un


objeto ResultSet con los datos obtenidos de la
consulta

executeQuery(String

Por ejemplo, si en la base de datos tenemos una tabla llamada persona, una
consulta de todos los registros de la tabla sera:
ResultSet rs = s.executeQuery("select * from persona");
5. Manipular el resultado de la consulta:
El objeto de tipo ResultSet devuelto por la consulta de seleccin dispone de un
cursor para desplazarse por los registros y de mtodos para acceder al valor de
cada campo.
Desplazarse por los registros de un ResultSet
Una vez obtenido, su cursor se sita justo antes del primer registro obtenido.
Por defecto, un ResultSet es un objeto de slo avance y solo lectura. El
recorrido se har siempre desde el principio hacia delante y los campos no
podrn ser modificados. Se pueden crear tambin ResultSets desplazables de
lectura/escritura.
El mtodo next() permite desplazarnos por los registros. Una llamada a este
mtodo desplaza el cursor al siguiente registro. Devuelve false si se ha llegado
al final y true en caso contrario.
while (rs.next()) {
.....
}

Acceder a los campos del resultado de una consulta


Los campos del registro apuntado por el cursor se pueden acceder mediante
dos grupos de mtodos. xxx es cualquier tipo de dato bsico Java ms String,
Date y Object. Se deber utilizar el mtodo adecuado al tipo de dato que
contiene el campo. Si no conocemos el tipo de dato podemos utilizar
getObject().
xxx getXxx(int posicin);

Obtiene el valor del campo que ocupa la


posicin indicada. La primera posicin es la 1.

xxx getXxx(String nombreCampo);

Obtiene el valor del campo que coincide con el


nombre indicado.

Por ejemplo, si la tabla persona contiene 3 campos en este orden: id de tipo


int, nombre de tipo String y fecha de tipo Date:
while (rs.next()) {
System.out.println(rs.getInt("Id") + " " + rs.getString(2) + " " +
rs.getDate(3));
}
Adems de estos mtodos, la interfaz ResultSet proporciona una gran cantidad
de mtodos para acceder y manejar los resultados de la consulta entre ellos:
boolean isFirst(): que devuelve true si el cursor apunta al primer registro.
boolean isLast(): que devuelve true si el cursor apunta al ltimo.
int getRow(): que devuelve la posicin del registro actual, siendo 1 la posicin
del primer registro, etc.
6. Desconexin de la base de datos:
Permite liberar recursos de memoria y CPU. El cierre de una conexin se
realiza mediante el mtodo close() de la interfaz Connection.
conexion.close();
La interfaz Statement tambin dispone de un mtodo close() para liberar los
recursos utilizados por el objeto. Esto debe hacerse antes de cerrar la
conexin.
Cuando se cierra una conexin todos los objetos Statement se cierran
automticamente.
La mayora de mtodos usados del API JDBC lanzan una excepcin de
tipo SQLException que se debe capturar.

Você também pode gostar