Excepciones Java y JDBC

11

description

fyflkf

Transcript of Excepciones Java y JDBC

EXCEPCIONESQU 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 EXCEPCIONESEn 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 gestionarlaThrowableEs la clase que agrupa todas las excepciones que podemos utilizar en nuestra aplicacin hecha enJavae inclusive si queremos crear nuestro propio tipo de excepcin podemos hacerlo al heredar de la claseExceptiono de alguna de sus sub-clases.

Lo que podemos destacar en el grfico es que tenemos dos subtipos grandes de lasexcepciones, 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 claseRuntimeExceptionque vemos en la imagen que posee, las excepciones ms comunes como laArithmeticExceptionque es obtenida cuando hay un problema con una operacin aritmtica.GESTIN DE EXCEPCIONESToda 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 TRYTry 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 CATCHEn 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 de cdigo donde se trata el problema);}

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 FINALLYY 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 / INTERFACEFUNCIN

Clase DriverManagerEstablece la conexin con la base de datos

Interface ConectionRepresenta una conexin con la BD

Interface StatementEjecucion de consultas SQL

InterfaceEjecucion de consultas preparadas y procedimientos almacenados

Interface ResultSetMetadataProporciona 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 programa necesitamos las clases que implementen estas interfaces.Driver JDBCLlamamosdriveral conjunto de clases que implementan las interfaces JDBCEl 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 JDBCUna 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 sentenciaimport java.sql.*;2. Cargar el driver:El driver se debe cargar para poder utilizarlo. Esto lo realiza el mtodo estticoforName()de la claseClass.Class.forName(String driver);Driver JDBC para MySQL:Class.forName("com.mysql.jdbc.Driver");Lanza una excepcinClassNotFoundException3. Crear la conexin:Esto lo realiza el mtodo estticogetConnection()de la claseDriveManager.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_conexionParaMySQL, el formato es:"jdbc:mysql://ordenador_donde_est_la_base_de_datos/base_de_datos".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 llamadapruebaque tiene un usuariorooty contrasea1dawescribiremos:Connection conexion =DriverManager.getConnection("jdbc:mysql://localhost/prueba","root", "1daw");4. Ejecutar una consulta:Las consultas se manejan mediante un objeto que implementa la interfaceStatement.Antes de poder ejecutar una consulta debemos crear el objeto. El objeto se crea utilizando el mtodocreateStatement()deConnection.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 executeQuery(String sentenciaSQL);Enva una consulta de seleccin. Devuelve un objeto ResultSet con los datos obtenidos de la consulta

Por ejemplo, si en la base de datos tenemos una tabla llamadapersona, 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 ResultSetUna vez obtenido, su cursor se sita justo antes del primer registro obtenido.Por defecto,un ResultSet es un objeto deslo 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 consultaLos 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 tablapersonacontiene 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 mtodoclose()de la interfazConnection.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 tipoSQLExceptionque se debe capturar.