Sei sulla pagina 1di 64

SPRING JDBC

Curso: Programacin orientada a objetos


Facultad: Ing. Mecnica, Aeronutica, automotriz y Software

Especialidad: Ingeniera de Software


Profesor : Ing. Gustavo Coronel Integrantes: Avila Herrera Melissa Pariona Felices Roberto Snchez Reyes Susana 2010

JDBC

INTRODUCCION

JDBC es una biblioteca de clases e interfaces que permite la conexin con base de datos utilizando Java. La biblioteca JDBC dispone de una interfaz para ejecutar instrucciones SQL que ofrece una funcionalidad bsica para el acceso a datos. las clases e interfaces que componen el API de JDBC son conceptos comunes de acceso a base de datos para todas las bases de datos. JDBC se diseo como una interfaz de programacin de aplicaciones (API) orientado a objetos para acceder (consultas) a bases de datos y es un estndar. El API JDBC se diseo como una interfaz para ejecutar consultas SQL y admite todos los dialectos de SQL.

Caractersticas

Conexin a la Base de Datos

Mecanismo JDBC
El funcionamiento prctico de JDBC obliga a conocer los siguientes 5 procedimientos, a saber: 1.Establecer conexin. 2.Crear sentencia. 3.Ejecutar sentencia. 4.Procesar resultados. 5.Cerrar.

1.- Establecer la conexin


Tiene dos operaciones bsicas. a) DriverManager

b) Connection

a.- DriverManager
La clase DriverManager es la capa gestora de JDBC, trabajando entre el usuario y el controlador (driver). Se encarga de seguir el rastro de los controladores que estn disponibles y establecer la conexin entre la base de datos y el controlador apropiado.

Para trabajar con el Puente JDBC-ODBC:


try { Class.forName(sun.jdbc.odbc.JdbcOdbcDriv er); } catch (ClassNotFoundException cnfe) { System.err.println(No ha podido encontrarse el driver de ODBC.); }

Para trabajar con MySQL:


try { Class.forName(com.mysql.jdbc.Driver); } catch (ClassNotFoundException cnfe) { System.err.println(No ha podido encontrarse el driver de MySQL); }

Para trabajar con postgreSQL:


try { Class.forName(org.postgresql.Driver); } catch (ClassNotFoundException cnfe) { System.err.println(No ha podido encontrarse el driver de postgreSQL); }

Para trabajar con Oracle:


try { Class.forName(oracle.jdbc.driver.Oracl eDriver); } catch (ClassNotFoundException cnfe) { System.err.println(No ha podido encontrarse el driver de Oracle); }

b.- Connection
Un objeto Connection representa una conexin a una base de datos. Una sesin con una conexin incluye las sentencias SQL que son ejecutadas y los resultados que son devueltos a travs de dicha conexin. Una misma aplicacin puede tener una o ms conexiones con una sola base de datos o puede tener conexiones con varias bases de datos diferentes. La forma estndar de establecer una conexin con una base de datos es llamando al mtodo DriverManager.getConnection. Este mtodo toma como parmetro una cadena de caracteres que contiene una URL. La clase DriverManage trata de localizar el driver que pueda conectar con la base de datos representada por esa URL.

Para trabajar con el Puente JDBC-ODBC con MsAccess (Windows XP):

import java.sql.*;

public static void conexion ( ) throws Exception { try { // Carga el driver Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Define la cadena de conexin String sourceURL = "jdbc:odbc:DSNSistema"; // Crea el objeto connection a travs de DriverManager Connection con = DriverManager.getConnection(sourceURL); System.out.println("La conexion establecida es: "+ con); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch(SQLException sqle) { System.err.println(sqle); }; };

Para trabajar con MySQL. import java.sql.*; public static void conexion ( ) throws Exception { try { // Carga el driver Class.forName("com.mysql.jdbc.Driver); // Define la cadena de conexin String sourceURL = "jdbc:mysql://localhost/bd_pruebas, usuario, password"; // Crea el objeto connection a travs de DriverManager Connection con = DriverManager.getConnection(sourceURL); System.out.println("La conexion establecida es: "+ con); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch(SQLException sqle) { System.err.println(sqle); }; };

Para trabajar con postgreSQL:


import java.sql.*; public static void conexion ( ) throws Exception { try { // Carga el driver Class.forName(org.postgresql.Driver); // Define la cadena de conexin String database = Bd; String username = admin; String password = admin; String sourceURL = "jdbc:postgresql:+database, username, password"; // Crea el objeto connection a travs de DriverManager Connection con = DriverManager.getConnection(sourceURL); System.out.println("La conexion establecida es: "+ con); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch(SQLException sqle) { System.err.println(sqle); }; };

Para trabajar con Oacle XE (versin 10g). import java.sql.*; public static void conexion ( ) throws Exception { try { // Carga el driver Class.forName("oracle.jdbc.driver.OracleDriver"); // Define la cadena de conexin String sourceURL =jdbc:oracle:thin:@localhost:1521:orcl, scott, tiger; // Crea el objeto connection a travs de DriverManager Connection con = DriverManager.getConnection(sourceURL); System.out.println("La conexion establecida es: "+ con); } catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch(SQLException sqle) { System.err.println(sqle); }; };

2.- Crear sentencia.


Statement Un objeto Statement se usa para enviar sentencias SQL a una base de datos. Statement senten = con.createStatement();

En realidad el mtodo createStatement debe llevar dos parmetros enteros que especifican el comportamiento del objeto ResultSet u hoja de datos

public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException

PreparedStatement
Un objeto PreparedStatement se usa para sentencias SQL que toman uno o ms parmetros como argumentos de entrada (parmetros IN). PreparedStatement tiene un grupo de mtodos que fijan los valores de los parmetros IN, los cuales son enviados a la base de datos cuando se procesa la sentencia SQL. PreparedStatement updateSales = con.prepareStatement ( UPDATE productos SET ventas = ? WHERE COD = ? );

3.-Ejecutar sentencia.
La sentencia SQL se ejecuta a travs de los mtodos executeQuery o executeUpdate dependiendo de que no exista o exista modificacin de los datos respectivamente. 1. Consulta executeQuery() Es una operacin SELECT que devuelve el resultado de una consulta encapsulado en un objeto de tipo ResultSet 2. Actualizacin executeUpdate() Es una operacin INSERT, UPDATE o DELETE que realiza una modificacin sobre la base de datos

ResultSet resul = senten.executeQuery ( SELECT a, b, c FROM Table2); Int filas_afectadas = senten.executeUpdate(UPDATE personas set nombre=Marina where id=4);

4.-Procesar resultados.
ResultSet Un ResultSet contiene todos los registros (filas) que satisfacen las condiciones impuestas en una sentencia SQL y proporciona acceso a los datos en dichos registros. El mtodo ResultSet.next() se usa para moverse al siguiente registro del ResultSet, haciendo el siguiente registro el registro actual.

5.-Cerrar.
Es necesario cerrar adecuadamente la sentencia el ResultSet y la conexin. senten.close(); resul.close(); con.close();

El mecanismo de funcionamiento bsico JDBC, Establecer conexin: Class.forName() y DriverManager.getConnection Crear sentencia: Statement senten = connexion.createStatement(); Ejecutar sentencia: executeUpdate o executeQuery Procesar resultados: while, resul.first(), resul.last(), resul.beforeFirst(), resul.afterLast(), resul.absolute (int num), resul.next(), resul.previous, resul.getRow(). Cerrar: sentencia.close(), resultados.close(), conexion.close();

Conviene recordar:

Spring Framework
El Spring Framework (conocido tambin como Spring) es un framework de cdigo abierto de desarrollo de aplicaciones para la conocida plataforma JAVA. La primera versin fue escrita por Rod Jonhson, quien lo lanz primero con la publicacin de su libro Expert One-on-One Java EE Design and Development (Wrox Press, octubre 2002). A pesar de que Spring Framework no obliga a usar un modelo de programacin en particular, se ha popularizado en la comunidad de programadores en Java al considerrsele una alternativa y sustituto del modelo de Enterprise JavaBean. Por su diseo el framework ofrece mucha libertad a los desarrolladores en Java y soluciones muy bien documentadas y fciles de usar para las prcticas comunes en la industria.

Spring Framework
Mientras que las caractersticas fundamentales de este framework pueden emplearse en cualquier aplicacin hecha en Java, existen muchas extensiones y mejoras para construir aplicaciones basadas en web por encima de la plataforma empresarial de Java (Java Enterprise Platform). Una de esas extensiones es el Spring JDBC. El 29 de octubre del presente ao se lanz la versin 3.0.5

Por qu Spring? Spring es nico, por varias razones:

Introduccin al Spring Framework 2.5

Se ocupa de aspectos importantes que otros frameworks

populares no. Spring se enfoca en proporcionar una manera de administrar los objetos de negocio.

Spring es integral y modular. Spring tiene una arquitectura en

capas, lo que significa que puedes optar por utilizar casi cualquier parte de ella de forma aislada, y an as su arquitectura es internamente consistente. Puedes optar por utilizar Spring slo para simplificar el uso de JDBC, por ejemplo, o puedes optar por utilizar Spring para gestionar todos los objetos de tu negocio. Y es fcil de introducir gradualmente Spring en proyectos existentes.

Introduccin al Spring Framework 2.5


Spring est diseado desde cero para ayudarle a escribir cdigo
que es fcil de probar. Spring es un framework ideal para probar proyectos.

Spring es una tecnologa de integracin cada vez ms importante,


su papel es reconocido por proveedores grandes y pequeos.

Spring est orientado a la mayora de asuntos de infraestructura

de aplicaciones tpicas. Tambin va a lugares a los que otros frameworks no van.

Beneficios de la arquitectura de Spring


Algunos de los beneficios de Spring son los siguientes: Spring puede organizar efectivamente tus objetos de nivel medio. Spring se encarga del shellcode que quedara si slo utilizas Struts u otros frameworks orientados a determinados APIs de J2EE. Y los servicios de configuracin de gestin de Spring pueden ser utilizados en cualquier capa de la arquitectura, en cualquier entorno de ejecucin.

Spring facilita la buena prctica de programacin, reduciendo el coste de la programacin de interfaces en lugar de clases a casi cero.

Beneficios de la arquitectura de Spring


Spring est diseado para que las aplicaciones creadas con ella dependen tan poco de su API como sea posible. Las aplicaciones creadas usando Spring son muy faciles de probar. Para ciertos escenarios de pruebas, el Spring Framework proporciona objetos simulados y clases de apoyo de pruebas. Spring tambin proporciona una exclusiva funcionalidad llamada "integration testing" en la forma de Spring TestContext Framework, adems JUnit 3.8 soporta clases que le permiten probar su cdigo de forma rpida y fcil, incluso mientras se accede a una base de datos intermedia.

Abstraccin JDBC y jerarqua de excepcin de acceso a datos


El acceso a datos es otra rea donde Spring brilla. JDBC ofrece una abstraccin bastante buena de la base de datos subyacente, pero es un API doloroso de usar. Algunos de los problemas incluyen: La necesidad de manejo de error detallado para garantizar que ResultSet, Statements y (lo ms importante) Conexions, se cierren despus de su uso. Esto significa que el uso correcto de JDBC puede rpidamente dar lugar a una gran cantidad de cdigo. Tambin es una fuente comn de errores. Fugas de conexin pueden llevar rpidamente a las aplicaciones a una carga baja.

La relativamente poco informativa SQLException. Tradicionalmente JDBC no ofrece una jerarqua de excepcin, pero produce una excepcin de SQL en respuesta a todos los errores. Descubrir lo que realmente sali mal (por ejemplo, fue el problema un deadlock o una sentencia SQL invalida) consiste en examinar el valor SQLSTATE y el cdigo de error. El significado de estos valores vara entre bases de datos. , por lo que sus DAOs no son necesariamente ligados a JDBC debido a las excepciones que pueden lanzar.

Abstraccin JDBC y jerarqua de excepcin de acceso a datos


Spring aborda estos problemas de dos maneras: Al proporcionar API que mueven las excepciones tediosas y propensas a errores del cdigo de aplicacin al framework. El framework se encarga de toda la gestin de excepciones, el cdigo de aplicacin se puede concentrar en la emisin de SQL apropiado y la extraccin de resultados.

Abstraccin JDBC y jerarqua de excepcin de acceso a datos


Al proporcionar una jerarqua de excepciones significativa del cdigo de aplicacin para trabajar en lugar de SQLException. Cuando Spring obtiene en primer lugar una conexin de un DataSource, examina los metadatos para determinar el producto de base de datos. Spring utiliza este conocimiento para mapear SQLExceptions y corregir la excepcin en su propia jerarqua descendiente de org.springframework.dao.DataAccessException. As, el cdigo puede trabajar con excepciones significativas, y no es necesario preocuparse por SQLState propietario o los cdigos de error. El acceso a datos de Spring no son excepciones JDBC especficas

Spring JDBC puede ayudar de varias maneras: Usted nunca tendr que escribir otra vez un bloque de finalizacin para usar JDBC. Las fugas de conexin sern cosa del pasado

Tendr que escribir menos cdigo en general, y ese cdigo estar claramente enfocado en las sentencias SQL necesarias.
Usted nunca tendr que ahondar a travs de la documentacin del RDBMS para averiguar qu oscuro cdigo de error devuelve un nombre de columna errneo. Su aplicacin no depender del cdigo de control de errores especfico de RDBMS. Cualquier tecnologa de persistencia que use, usted encontrar fcil de implementar el patrn DAO sin lgica de negocio en funcin de cualquier API de acceso a datos particular. Usted se beneficiar de una mejor portabilidad (en comparacin con JDBC crudo) en reas avanzadas como manipulacin de BLOB y la invocacin de procedimientos almacenados que devuelven resultsets. Todo esto equivale a ganancias sustanciales en productividad y menos errores.

Mdulos principales de Spring


Spring Core (Inversin del control (IoC) / Inyeccin de
dependencias (DI)) Spring AOP (Programacin orientada a aspectos) Spring JDBC (Acceso a datos) Spring MVC (desarrollo Web segn el patrn MVC) Spring Remoting (distribucin) Spring Transaction Abstraction (Gestin de transacciones) Otros: Spring TestContext (pruebas), Spring JMX (gestin), Spring Security (seguridad), Spring Web Flow (control de flujos en aplicaciones Web)

Spring JDBC (Acceso a datos)


El mdulo de JDBC Este mdulo contiene varias caractersticas muy tiles, pero la ms poderosa es el JdbcTemplate.

Ejemplo clsico
Tomemos como ejemplo el ya clsico ciclo para leer datos de una tabla: Obtener un DataSource de algn lugar, ya sea por JNDI en un contenedor, o bien crendolo por cdigo en aplicaciones independientes. Obtener una conexin a la base de datos, por medio del DataSource. Crear un PreparedStatement con el query a realizar.

Ejemplo clsico
Si el query trae parmetros, configurarlos uno por
uno. Ejecutar el query para obtener un ResultSet. Recorrer el ResultSet, haciendo algo con los objetos; un ejemplo simple es crear una instancia de alguna clase de Value Object y ponerle los valores que vienen en la tupla actual, y luego poner ese Value Object en una lista. Cerrar el ResultSet. Ejemplo Cerrar el PreparedStatement. Cerrar la conexin.

Conclusin
Todo lo anterior tiene que estar dentro de uno o varios try-catch por si ocurre alguna excepcin, cerrar los objetos que tengamos. Es algo muy tedioso de programar, sobre todo cuando se quiere obtener una lista corta de objetos que se van a presentar en alguna pgina web o en una interfaz y dichos objetos pueden ser simples mapas con los nombres de las columnas como llaves.

Spring-Jdbc
Jerarqua de paquetes El framework de abstraccin JDBC de Spring consiste en cuatro diferentes paquetes core, dataSource, object y support.
El paquete org.springframework.jdbc.core contiene JdbcTemplate y varias interfaces para callback, la clase

El paquete org.springframework.datasource contiene clases de utilera para acceso fcil a los DataSource, y varias implementaciones de DataSource que pueden ser utilizadas para pruebas o para correr cdigo JDBC sin modificar fuera de un contenedor J2EE

Spring-Jdbc
Jerarqua de paquetes
El paquete org.springframework.jdbc.object contiene clases que representan las consultas (queries) a los RDBMS, las actualizaciones (updates) y los procedimientos almacenados (stored procedures) en objetos reusables .

Y por ltimo, el paquete org.springframework.jdbc.support es donde se encuentra la traduccin de excepciones SQLException as como algunas clases de utilera. Las excepciones arrojadas durante el procesamiento de JDBC son traducidas a excepciones definidas en el paquete org.springframework.dao.

Spring-Jdbc
Usando las clases principales de JDBC para controlar el procesamiento de JDBC y el manejo de errores. JdbcTemplate: Se encarga de ejecutar las funciones comnes de JDBC como la creacin y ejecucin de statements. Esta clase ejecuta los queries (consultas) SQL, las actualizaciones (updates) y las llamadas a procedimientos almacenados (stored procedures), realizando la iteracin sobre ResultSets y extrayendo los parametros retornados. Tambin captura las excepciones de JDBC y las traduce en una jerarqua de excepciones ms genrica e informativa definida en el paquete org.springframework.dao

Spring-Jdbc
JdbcTemplate (Ejemplos)
Consultar por un String
String surname = (String) this.jdbcTemplate.queryForObject( "select surname from t_actor where id = ?", new Object[]{new Long(1212)}, String.class);

Consultar y rellenar un simple objeto de dominio.


Actor actor = (Actor) this.jdbcTemplate.queryForObject( "select first_name, surname from t_actor where id = ?", new Object[]{new Long(1212)}, new RowMapper() { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Actor actor = new Actor(); actor.setFirstName(rs.getString("first_name")); actor.setSurname(rs.getString("surname")); return actor; } });

Spring-Jdbc
NamedParameterJdbcTemplate:
La clase NamedParameterJdbcTemplate aade soporte a los statements JDBC mediante parmetros nombrados (a diferencia de los statements JDBC que usan solo argumentos '?' para su sustitucin). Ejem:
public int countOfActorsByFirstName(String firstName) {

String sql = "select count(0) from T_ACTOR where first_name = :first_name";


SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName); return namedParameterJdbcTemplate.queryForInt(sql, namedParameters); }

Spring-Jdbc
SimpleJdbcTemplate: La clase SimpleJdbcTemplate es un
envolvente de un JdbcTemplate clsico que toma ventaja de las caractersticas de Java 5 como son los argumentos variables.
public Actor findActor(long id) { String sql = "select id, first_name, last_name from T_ACTOR where id = ?"; ParameterizedRowMapper<Actor> mapper = new ParameterizedRowMapper<Actor>() { public Actor mapRow(ResultSet rs, int rowNum) throws SQLException { Actor actor = new Actor(); actor.setId(rs.getLong("id")); actor.setFirstName(rs.getString("first_name")); actor.setLastName(rs.getString("last_name")); return actor; } }; return this.simpleJdbcTemplate.queryForObject(sql, mapper, id); }

Spring-Jdbc
DataSource
Para poder trabajar con datos de una base de datos, uno necesita obtener una conexin a la misma. La manera en que Spring hace esto es mediante un DataSource. Un DataSource es parte de la especificacin JDBC y puede verse como una fbrica de conexiones. Permite al contenedor o al framework ocultar el pool de conexiones y el manejo de transaciones del cdigo de aplicacin.

Spring-Jdbc
DataSource
La clase DriverManagerDataSource trabaja de la misma manera en que usualmente se obtiene una conexin JDBC. Se tiene que especificar el nombre calificado de la clase del driver JDBC que se va a utilizar para que el DriverManager la cargue. Posteriormente se provee una url de conexin que vara dependiendo de los drivers JDBC. Uno tiene que consultar la documentacin del driver para encontrar el valor correcto a usar. Finalmente uno provee el nombre de usuario y la contrasea usadas para conectarse a la base de datos. Ejemplo:

Spring-Jdbc
DataSource
public static void crearDataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName("oracle.jdbc.driver.OracleDriver"); ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE"); ds.setUsername("demo02"); ds.setPassword("demo02"); template = new JdbcTemplate(ds); }

Spring-Jdbc
SQLExceptionTranslator
Es una interface para ser implementado por las clases, puede traducir entre SQLExceptions y las excepciones de Spring derivadas de org.springframework.org.dao.DataAccessException. Las implementaciones pueden ser genricas (por ejemplo, mediante el uso de cdigos de SQLState para JDBC) o propietarias (por ejemlo, usando cdigos de error de Oracle) para mayor precisin.

Conclusin
Aspectos a mejorar en el ejemplo: SQLException: excepcin genrica Captura de excepciones para no hacer nada Cmo lo mejora Spring?
Mapeo de SQLException a excepciones especficas Subclases de org.springframework.dao.DataAccessException Uso de unchecked exceptions
DataAccessException es una subclase java.lang.RuntimeException Se pueden capturar si se desea, pero no es obligatorio de

Automatiza la gestin de conexiones

Se declara una fuente de datos y Spring la gestiona No se accede directamente a las conexiones, sino que se utiliza un JdbcTemplate Usualmente un org.springframework.jdbc.core.JdbcTemplate

El Wiki
http://spring-jdbc.wikispaces.com/

A LEER EN CANTIDADES INSDUSTRIALES

FIN DE LA PRESENTACION A LEER EN CANTIDADES INSDUSTRIALES

Bibliografa
http://www.xmind.net/share/lshimokawa/springjdbc/ http://www.comunidadjava.org/?q=node/421 http://www.javadocexamples.com/java_source/o rg/springframework/prospring/ticket/db/Sample BatchTests.java.html http://www.comunidadjava.org/?q=node/421 http://chuwiki.chuidiang.org/index.php?title=Eje mplo_sencillo_con_SpringFramework_DAO

Spring-Jdbc
Spring JDBC ofrece un objeto llamado JdbcTemplate (El equivalente Spring a la clase Connection ), el cual se configura con un DataSource Entonces el componente que necesita obtener estos datos (por ejemplo un DAO) puede simplemente tener una propiedad llamada jdbcTemplate, por ejemplo: Primero se obtiene el equivalente Spring a una conexin con base de datos. Aunque hay muchas formas de hacerlo, incluyendo ficheros de configuracin, una forma ms inmediata, directamente en cdigo seria :
Ejemplo

Ejemplo
Una vez que se obtiene la conexin, con el mtodo query() de JdbcTemplate podemos hacer la consulta. A este mtodo: Le pasamos un String con la sentencia SQL de select. Le pasamos una clase RowMapper encargada de: instanciar una clase Persona, leer una fila del ResultSet resultante y devolver dicha clase Persona. Devuelve una Collection rellena de Persona.

Spring-Jdbc
El JdbcTemplate tiene varios mtodos para leer datos, por ejemplo para obtener un solo dato o un solo registro, as como para modificar (INSERT, UPDATE, DELETE). Lo que el JdbcTemplate hace es todo lo que se menciono antes: Abre una conexin, crea un PreparedStatement con el SQL y los parmetros que se le da, lee los datos y los pone en una lista, cierra todo y los devuelve.

Spring-Jdbc
Adems, cualquier excepcin de SQL que ocurra la convierte a un DataAccessException (hay toda una jerarqua de clases) pero es de tipo RuntimeException, as que se puede incluso quitar el try-catch y dejar que quien invoque el mtodo se encargue de lidiar con cualquier excepcin.

Spring-Jdbc
Los paquetes de Spring org.springframework.jdbc y org.springframework.core.simple

Es donde vienen la mayora de las clases que intervienen en esto, aunque como pueden ver, tienen que usar solamente una o dos, pero es importante conocer las excepciones que pueden arrojarse y esas vienen en org.springframework.dao.

Potrebbero piacerti anche