Poo Clase13 Jdbc

20
Ing. Marcelino Torres Villanueva

Transcript of Poo Clase13 Jdbc

  • Ing. Marcelino Torres Villanueva

  • (JDBC) Java DataBase ConnectivityJDBC es una API estndar que implementa la estrategia universal de acceso a datos de JAVA.La API JDBC provee acceso a bases de datos relacionales (RDBMS), as como a fuentes de datos tabulares (planillas de clculo). El nico requerimiento es disponer del driver JDBC apropiado.La API JDBC es una parte integral de la plataforma Java. Desde J2SE 1.4/J2EE 1.4. se incluye JDBC 3.0.JDBC es usado por aplicaciones de escritorio, applets y servlets.

  • El API JDBCJDBC esta presente en el JDK de Java ( desde el JDK 1.1).

    Los paquetes que lo conforman :java.sqljavax.sql paquete opcional que se incluye en JDBC 2.0 o posterior

    El cdigo es independiente del gestor que utilitzenPortableEscalable

  • Pasos para el uso de JDBC para la ejecucin de comandos SQL

  • La clase java.sql.DriverManagerProvee servicios para administrar un conjunto de drivers JDBC.

    Permite localizar un JDBC driver cargado en memoria (mediante el mtodo Class.forName()) y devolver una conexin a la bd dada por la url.

    Se usa el mtodo getConnection(url, usuario, contrasea) para obtener una conexin a la bd, con lo cual se debe conocer su url JDBC, usuario y contrasea.

    DriverManager es una clase (no una interface) que viene con la API, con lo cual, un proveedor de bd no puede optimizar esta clase.

  • 1. CargarInstrucciones para la carga del driver

    Class.forName(NOMBRE_DRIVER);

    Para cargar el driver de MySQL colocaremos lo siguiente:

    Class.forName("com.mysql.jdbc.Driver");

    El driver es cargado a memoria y la clase DriverManager lo gestiona

  • 2. Obtener la ConexinUn objeto java.sql.Connection representa una conexin con una Base de Datos. Sobre una conexin pueden ser ejecutadas sentencias SQL y obtenerse resultados.La clase DriverManager provee el mtodo sobrecargado getConnection, que requiere la URL JDBC para especificar los detalles de la conexin.Una base de datos en JDBC es identificada por una URL (Uniform Resource Locator). Especifica el nombre y la ubicacin de la BD. La sintxis recomendada para la URL JDBC es la siguiente: j dbc:: Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/bdejemplo"; String user="root"; String password=""; Connection cn=DriverManager.getConnection(url,user,password);

  • 3 y 4 Crear y Ejecutar el Comandojava.sql.Statementse utiliza el mtodo createStatement de una instancia Connection para su creacin.Permite la ejecucin de una sentencia SQL, sus mtodos principales son:executeQuerySentencias SELECT que devuelve un java.sql.ResultSetexecuteUpdateSentencias INSERT, DELETE, UPDATE, CREATE, que devuelve un enteroexecuteSentencias desconocidas en tiempo de compilacin o sentencias que devuelven resultados complejos, devuelve true/false.

    java.sql.PeparedStatementse utiliza el mtodo prepareStatement de una instancia Connection para su creacin.Extiende Statement para aadir sentencias precompiladas SQL, que compila la sentencia SQL la primera vez. estas son llamadas ms de una vez en el programa.Soporta parmetros de entrada: setInt, setFloat, setLong, setString

    java.sql.CallableStatementse utiliza el mtodo prepareCall de una instancia Connection para su creacin.Extiende la funcionalidad de PreparedStatement, permite la invocacin de procedimientos almacenados, si el manejador los soporta.

  • 4.1 Procesar los Resultadosjava.sql.ResultSetContiene los datos resultado de una sentencia SQL que se recuperan secuencialmente en filasEl mtodo next() sirve para avanzar una filaSe puede acceder a los datos de las columnas en cualquier orden por ndice de posicin o nombre del campoProvee mtodos para recuperar los datos de un campo: getString, getFloat, getInt, etc.El mtodo wasNull() indica si el campo contiene valores nulos.

  • 5. Liberar RecursosLas clases:ConnectionStatement, PreparedStatement,CallableStatementResultSetproveen el mtodo close(), que activa la realizacin de la instancia especfica, que liberan todos los recursos JDBC que se ejecutan sobre el servidor de datos.

    Cuando se invoca el mtodo close() de un Statement, los ResultSet asociados son cerrados automticamente.

    La invocacin al mtodo close() de Connection, puede provocar un SQLException si esta ya est cerrada.

  • ResumenLa clase DriverManager provee acceso a drivers JDBC registrados y permite obtener conexiones (Connection) a una fuente de datos con el mtodo getConnection.

    La clase Connection representa una sesin sobre una base de datos y es usada para crear Comandos (Statement).

    La clase Statement y sus derivados permiten la ejecucin de comandos SQL ya sean DDL o DML, tanto para la recuperacin y actualizacin de datos.

    La clase ResultSet contiene los datos resultantes de una consulta de seleccin, mantiene el cursor a una fila de datos. El mtodo next permite desplazarse a la siguiente fila. Los mtodos getXXX retornan el valor de las columnas de la fila actual, dado un ndice o un nombre.

  • Cargar el Driverpublic static void cargarDriver(){ try{ Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundException e) { System.out.println( "Error no se puede cargar el driver: + e.getMessage()); } }

  • Conexin con la Base de Datos try{ String url="jdbc:mysql://localhost:3306/bdejemplo"; String user="root"; String password=""; cn=DriverManager.getConnection(url,user,password);}catch(SQLException e) { JOptionPane.showMessageDialog(null,"Error no se puede puede establecer la conexion"+e.getMessage()); }

  • Insertar un RegistroSe leen los datos : idproducto, descripcion, precio y stock y luego:try{ String sql="insert into producto(idproducto,descripcion,precio,stock) values (?,?,?,?)"; PreparedStatement ps=cn.prepareStatement(sql); ps.setString(1,idproducto); ps.setString(2,descripcion); ps.setDouble(3, precio); ps.setInt(4, stock); ps.executeUpdate();}catch(SQLException e){ JOptionPane.showMessageDialog(null,"Error en SQL "+e.getMessage());}

  • Consultar un Registro (1)// leemos el id del producto a buscar

    System.out.print("Id del Producto : "); idproducto=br.readLine(); try{ String sql = "select * from producto where idproducto=?"; PreparedStatement ps= cn.prepareStatement(sql); ps.setString(1, idproducto); ResultSet rs = ps.executeQuery();

  • Consultar un Registro (2) if(rs.next()) { descripcion=rs.getString(2); precio=rs.getDouble(3); stock=rs.getInt(4); System.out.println("Descripcion : "+descripcion); System.out.println("Precio : "+precio); System.out.println("Stock : "+stock); } else System.out.println("el idproducto no existe"); }catch(SQLException e) { System.out.println("Error en SQL "+e.getMessage()); }

  • Eliminar un Registro System.out.print("Id del Producto : "); idproducto=br.readLine(); try{ String sql = "delete from producto where idproducto=?"; PreparedStatement ps= cn.prepareStatement(sql); ps.setString(1, idproducto); int nro=ps.executeUpdate(); if(nro>0) System.out.println("Se elimino el registro "); else System.out.println("no existe el id "); }catch(SQLException e) { System.out.println("Error en SQL "+e.getMessage()); }

  • Actualizar un Registro (1) System.out.print("Id del Producto a actualizar: "); idproducto=br.readLine(); try{ String sql = "select * from producto where idproducto=?"; PreparedStatement ps= cn.prepareStatement(sql); ps.setString(1, idproducto); ResultSet rs = ps.executeQuery(); if(rs.next()) { System.out.println("Nueva Descripcion : "); descripcion=br.readLine(); System.out.println("Nuevo precio : "); precio=Double.parseDouble(br.readLine()); System.out.println("Nuevo stock : "); stock=Integer.parseInt(br.readLine());

  • Actualizar un Registro (2) sql="update producto set descripcion=?, precio=?, stock = ? where idproducto=?"; ps=cn.prepareStatement(sql); ps.setString(1,descripcion); ps.setDouble(2, precio); ps.setInt(3, stock); ps.setString(4,idproducto); ps.executeUpdate(); System.out.println("Se actualizo el producto"); } else System.out.println("El idproducto no existe"); }catch(SQLException e) { System.out.println("Error en SQL "+e.getMessage()); }

  • Mostrar todos los Registros try{ String sql = "select * from producto"; PreparedStatement ps = cn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()) { idproducto=rs.getString(1); descripcion=rs.getString(2); precio=rs.getDouble(3); stock=rs.getInt(4); System.out.println(idproducto+", "+descripcion+", "+precio+", "+stock); } }catch(SQLException e) { JOptionPane.showMessageDialog(null,"Error en SQL "+e.getMessage()); }

    Recuperacin y actualizacin de datos con JDBC17-*Professional Java DeveloperPasos para el uso de JDBC para la ejecucin de comandos SQL

    Cargar y registra el driverSe manipula a nivel de memoria la clase java.sql.DriverManager

    Obtener la ConexinSe obtiene una instancia de tipo java.sql.Connection mediante el DriverManager

    Crear el ComandoDesde una instancia de Connection se pueden crear:Comandos Estticos (java.sql.Statement)Comandos Dinmicos (java.sql.PreparedStatement)Llamadas a Procedimientos Almacenados (java.sql.CallableStatement)

    Ejecutar el ComandoExisten dos modos bsicos de ejecucin de comandoexecuteQuery para comandos SelectexecuteUpdate para comando DDL y DML de actualizacin4.1 Procesar los ResultadosSlo en caso de la ejecucin de una consulta de seleccin, los resultados son manipulados a travs de una instancia de java.sql.ResultSet, el cual brinda soporte para recorrido sobre registros.

    Liberar RecursosLa llamada al mtodo close() de una conexin o de un comando, marca las instancias para su eliminacin de memoria por el Recolector de basura.Recuperacin y actualizacin de datos con JDBC17-*Professional Java DeveloperLa clase java.sql.DriverManager

    Caractersticas

    Lleva el control de los gestores JDBC disponiblesEs posible que existan varios dentro del sistemaPor defecto, carga todos los disponibles en jdbc.driversEl gestor cargado debera registrarse con el mtodo registerDriver

    java.sql.Driver

    Gestor de informacin y configuracin general que se carga durante la inicializacin mediante:DriverManager.registerDriverClass.forNameSe le pedir informacin a lo largo del programa, residir en memoria, dentro sus mtodos ms importantes: connect y getPropertyInfo.

    Recuperacin y actualizacin de datos con JDBC17-*Professional Java DeveloperCargar/Registra el Driver JDBC

    1.El mtodo forName se utiliza para cargar clases por reflexin, de forma indirecta

    2. Un mtodo de registro directo

    3. Usando las opciones de la Mquina Virtual de Java, Permite Cambiar de driver sin recompilarRecuperacin y actualizacin de datos con JDBC17-*Professional Java DeveloperEstableciendo una Conexin

    java.sql.ConnectionPuntero a la base de datos que proporciona el contexto de trabajo para los objetos Statement y ResultSet. Soporta propiedades de transaccin: setAutoCommit, commit y rollback.Recuperacin y actualizacin de datos con JDBC17-*Professional Java DeveloperObtener los Datos de una Consulta de Seleccin

    Creando y ejecutando una sentencia esttica de seleccin

    Creando una sentencia dinmica de seleccin

    Creando una llamada a un Procedimiento Almacenado que contiene una sentencia de seleccin

    Recuperacin y actualizacin de datos con JDBC17-*Professional Java Developer4.1 Procesar los Resultados

    Recuperacin de Datos de una instancia de ResultSet

    Recuperacin de Datos de una instancia de ResultSet verificando valores nulosRecuperacin y actualizacin de datos con JDBC17-*Professional Java Developer5. Liberar Recursos

    Cuando una Excepcin es lanzada los recursos pueden estar ya creados, por tanto, se pueden escribir el siguiente cdigo, para asegurarnos de liberar siempre los recursos utilizados:

    Recuperacin y actualizacin de datos con JDBC17-*Professional Java Developer