Java DataBase Connectivity (JDBC)

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

Acceso a Bases de Datos con Java
Fernando Alonso Blázquez Servlets con acceso a Bases de Datos 29 de Abril de 2004.
JDBC Acceso a B.B.D.D. con Java.
Programador en Plataforma Java y XML
Lenguaje de consulta de Hibernate
Oracle y Java Continuación *
UNIVERSIDAD LATINA (UNILA) VI.- ARCHIVOS Y BASES DE DATOS
Francisco Moreno Bases de Datos II Universidad Nacional
Sistema de gestión de las bases de datos (SGBD).
JAVA Persistence API (JPA)
ODBC - JDBC Gabriel Vásquez Dpto. Electrónica, Instrumentación y Control.
M.I. María Luisa González Ramírez Servlets y JSP.
Tema 3 J2EE Java Database Connectivity Temas Selectos de Cómputo Grupo 912.
1 Ingeniería del Software Ejercicios de Implementación  Caso de Uso Total Gasto (Junio 2003)  Caso de Uso Mejor Usuario (Septiembre 2003)  Caso de Uso.
ARCHIVOS Y CONEXIÓN A BASE DE DATOS. FileInputStream: Clase que representa ficheros de texto accedidos en orden secuencial, byte a byte. FileWriter: Clase.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Manejo de Base de Datos en Java Ing. Esp. Ricardo Cujar.
Fernando Alonso Nicolás Serrano Acceso a Bases de Datos con Java JDBC 01 de Abril de 2008.
Programación Orientada a Objetos II
Programación Orientada a Objetos Modulo 7 JDBC Universidad de Chile Departamento de Ciencias de la Computación.
Fernando Alonso Nicolás Serrano Servlets con acceso a Bases de Datos 21 de Abril de 2008.
1 TEMA 8. Acceso a bases de datos Arquitectura de una aplicación que accede a una BD Arquitectura de una aplicación que accede a una BD Establecer la conexión.
JDBC Java Database Connectivity CC52N - Computación para el trabajo grupal Profesor: Nélson Baloian Por: Edgard Pineda.
DESARROLLO DE APLICACIONES INALAMBRICAS USANDO JAVA Presentado por : Karlens Berra B. Francys J. Zambrano Ch. UCV.Facultad de Ciencias.Escuela de Computación.
1 Programación Interactiva JDBC Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle.
Java Data Base Connectivity
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Bases de Datos y Conectores
API JDBC Java Database Connectivity. Conceptos básicos API de Conectividad a Bases de Datos Emplea SQL Standard Ventaja: los programas desarrollados en.
ARREGLOS. La sintaxis para declarar e inicializar un array será: Tipo_de_variable[ ] Nombre_del_array = new Tipo_de_variable[dimensión]; También podemos.
JDBC. Definición Java Database Conectivity El acceso a bases de datos JDBC implica abrir una conexión ejecutar comandos SQL en un sentencia procesar los.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
Crear Aplicación Cliente para Conectarse a una Base de Datos.
Los principales inventores de este languaje son Anders Hejlsberg, Scott Wiltamuth, and Peter Golde. Creado, Utilizado e implementado por Microsoft desde.
2015-BM5A. ¿Qué estructuras de Programación conocemos? Condicional: If … { } … Else …{ } Condicional por Casos: Switch (opcion) { } Repetitiva exacta:
Administración de Sistemas Gestores de Bases de Datos.
Control, adquisición y monitoreo con Arduino y Visual Basic .net
Francisco Moreno Bases de Datos II Universidad Nacional
Conferencia 9. ODBC, OLE DB y JDBC.
CC Bases de Datos Otoño Clase 8: SQL (IV) Acceso programático
#606 | SANTIAGO 2017 Abril 1, 2017 Santiago, Chile #sqlsatSantiago.
Aidan Hogan CC Bases de Datos Primavera 2016 Clase 10: SQL (V) El Hacker Contraataca Acceso programático Aidan Hogan
SQL: Structured Query Language
Conexiones a Bases de Datos Utilizando la clase Conexión
Curso Computación-Tecnología Médica
Tipos de datos en MYSQL YEAR: Año. “YYYY” o “YY”
Programación Orientada a Objetos
SQL: Structured Query Language
Stored Procedures Firebird.
SQL Prof. Martín Contreras.
CONEXIÓN A BASE DE DATOS
Conectividad de Bases de Datos
Definición y Conversión de datos
Unidad 3. Introducción a la programación
Fundamentos básicos del lenguaje C#. Parte 1 Introducción a C#
Base de Datos II 2da Parte. Propiedad ACID  La propiedad ACIDa es una carácterística de un DBMS para poder compartir datos en forma segura.  A :
#606 | SANTIAGO 2017 Abril 1, 2017 Santiago, Chile #sqlsatSantiago.
Generaciones de Bases de Datos
El Leguaje Orientación al objeto.
Java Database Connectivity JDBC
Capítulo 7 USO DE BASES DE DATOS OBJETO- RELACIONALES.
JDBC: comunicación Java-Base de Datos
SQL1 7/9 Baloian Acceso a Bases de Datos
Programación Orientada a Objetos
Transcripción de la presentación:

Java DataBase Connectivity (JDBC) 1/17/2019 Java DataBase Connectivity (JDBC) David Gil Sánchez 1/17/2019 David Gil Sánchez

Conceptos Fundamentales JDBC API (java.sql) Clases y métodos para: establecer una conexión con una BD enviar sentencias SQL a dicha BD procesar los resultados Los desarrolladores de SGBD proporcionan “drivers” JDBC Código no cambia si cambiamos de SGBD, excepto la referencia al driver. 1/17/2019 David Gil Sánchez

Ejemplo de código JDBC Connection con = DriverManager.getConnection ( “jdbc:odbc:Data Base Alpha”, “login”, “password”); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(“SELECT a,b,c FROM Table1”); while (rs.next()){ int x = rs.getInt(“a”); String s = rs.getString(“b”); float f = rs.getFloat(“c”); } 1/17/2019 David Gil Sánchez

Standard JDBC Basado en el X/Open SQLCall Level Interface (CLI) para interacciones cliente/servidor Basado en el standard ANSI SQL-92 Adoptado por la mayoría de los vendedores de SGBD Drivers ya escritos para la mayoría de los SGBD más potentes 1/17/2019 David Gil Sánchez

Estructura General JDBC DBMS A DBMSB Java Application JDBC API JDBC Driver Manager JDBC Driver 1/17/2019 David Gil Sánchez

¿Por qué no utilizar ODBC? ODBC está escrito en C por lo tanto los programas escritos en JAVA deberían hacer llamadas a código en C y esto crea problemas Traducción directa de ODBC a JDBC es difícil Al estar escrito JDBC en JAVA permite su portabilidad 1/17/2019 David Gil Sánchez

Tipos de drivers TIPO 1: Puente JDBC-ODBC. El puente se encarga de traducir las llamadas que se hacen a llamadas ODBC y de pasarlas al driver ODBC apropiado. TIPO 2: Native-API. Convierte las llamadas JDBC a llamadas del API del cliente del SGBD. Requiere código binario en el cliente. 1/17/2019 David Gil Sánchez

Tipos de drivers TIPO 3: Network-Protocol. Traduce las funciones JDBC a un protocolo de comunicaciones independiente del SGBD, el cual traduce dichas funciones al API del SGBD específico. TIPO 4: Native-Protocol. Traducen directamente las llamadas JDBC al protocolo de red que usa la BD. 1/17/2019 David Gil Sánchez

JDBC-ODBC Bridge Puente que permite unir código Java con drivers ODBC de MsWindows Necesidad de registrar la BD con ODBC antes de utilizarla ODBC utiliza sentencias SQL para manipulación y consulta 1/17/2019 David Gil Sánchez

Clases JDBC java.sql.DriverManager permite la carga de drivers y establecer una conexión java.sql.Connection representa una conexión con una BD determinada java.sql.Statement actua como un contenedor para una sentencia SQL a ejecutar sobre una conexión java.sql.ResultSet representa el cursor con el resultado 1/17/2019 David Gil Sánchez

Clases JDBC El interface java.sql.Statement tiene dos sub-tipos importantes: java.sql.PreparedStatement para ejecutar sentencias SQL precompiladas java.sql.CallableStatement para ejecutar procedimientos almacenados 1/17/2019 David Gil Sánchez

Clase DriverManager Capa de gestión de JDBC 1/17/2019 Clase DriverManager Capa de gestión de JDBC permite cargar drivers automáticamente (propiedad del sistema "jdbc.drivers") Permite establecer una conexión entre un driver y una BD Monitoriza una conexión para en aspectos como timers, mensajes de log, trazas, etc. Todos sus métodos son (el constructor es private) 1/17/2019 David Gil Sánchez

Interface Driver Específico para cada DBMS acceptsURL(String) connect(String url,Properties info) getPropertyInfo() jdbcCompliant() getMajorVersion getMinorVersion 1/17/2019 David Gil Sánchez

Cargar los Drivers Se cargan los drivers que se encuentran especificados en la propiedad “jdbc.drivers”) Explícitamente: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 1/17/2019 David Gil Sánchez

Connection Interface Establece una conexión entre el programa y la BD Se establece invocando al método estático getConnection(url) de la clase DriverManager url String jdbc:<subprotocol>:<subname> subprotocol normalmente el nombre del driver subname puede incluir una conexión de red y un nombre de archivo 1/17/2019 David Gil Sánchez

Establecer una conexión Connection con = DriverManager.getConnection(url, "myLogin", "myPassword"); String url = "jdbc:odbc:Fred"; Connection con = DriverManager.getConnection(url, "Fernando", "J8"); URL jdbc:<subprotocol>:<subname> subname //hostname:port/subsubname 1/17/2019 David Gil Sánchez

Connection Interface Usado para crear un nuevo objeto Statement con.createStatement() Otros métodos de interés: void close() - libera recursos void commit() - commits transacciones DataBaseMetaData getMetaData() CallableStatement prepareCall(String sql) void rollback() - rolls back hasta el anterior commit o rollback void setAutoCommit(boolean enable) 1/17/2019 David Gil Sánchez

Crear una sentencia Statement stmt = con.createStatement(); con.commit(); con.rollback(); 1/17/2019 David Gil Sánchez

Statement Class Representa un objecto creado con createStatement() de la clase Connection Usada para enviar una sentencia SQL simple sin parametros PreparedStatement ejecuta sentencias SQL precompiladas CallableStatement ejecuta procedimientos almacenados 1/17/2019 David Gil Sánchez

Statement Class Methods void close() ResultSet executeQuery(String sql) int executeUpdate(String sql) void setMaxRows(int max) void setQueryTimeout(int seconds) 1/17/2019 David Gil Sánchez

Crear un ODBC Click en Start, Settings, Control Panel Click en 32 bit ODBC Click en Add y elegir un driver como Microsoft Access Escribir un nombre para la fuente de datos (se usará en el programa Java) y la descripción Click en Select para seleccionar una BD existente o bien crear una nueva 1/17/2019 David Gil Sánchez

Crear una tabla import java.net.URL; import java.sql.*; public class CrearProveedores { public static void main(String args[]) { String url = "jdbc:odbc:prueba1"; Connection con; String createString; Statement stmt; createString = "create table PROVEEDORES " + "(PROV_ID int, " + ”`PROV_NAME varchar(40), " + "STREET varchar(40), " + "CITY varchar(20), " + "STATE char(2), CP char(5))"; 1/17/2019 David Gil Sánchez

Crear una tabla //CARGAR EL DRIVER try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } 1/17/2019 David Gil Sánchez

Crear una tabla try { con = DriverManager.getConnection(url, "myLogin", "myPassword"); stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } 1/17/2019 David Gil Sánchez

Insertar tuplas a una tabla import java.sql.*; public class InsertarProveedores { public static void main(String args[]) { String url = "jdbc:odbc:prueba1"; Connection con; Statement stmt; String query = "select PROV_NAME, PROV_ID from PROVEEDORES"; 1/17/2019 David Gil Sánchez

Example Populate Table try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } con = DriverManager.getConnection(url, "myLogin", "myPassword"); stmt = con.createStatement(); 1/17/2019 David Gil Sánchez

Example Populate Table stmt.executeUpdate("insert into PROVEEDORES " + "values(49, 'Superior Coffee', '1 Party Place', " + "'Mendocino', 'CA', '95460')"); "values(101, 'Acme, Inc.', '99 Market Street', " + "'Groundsville', 'CA', '95199')"); "values(150, 'The High Ground', '100 Coffee Lane', " "'Meadows', 'CA', '93966')"); 1/17/2019 David Gil Sánchez

Ejemplo consultar una tabla ResultSet rs = stmt.executeQuery(query); System.out.println(”Proveedores y sus ID:"); while (rs.next()) { String s = rs.getString(”PROV_NAME"); int n = rs.getInt(”PROV_ID"); System.out.println(s + " " + n); } stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); 1/17/2019 David Gil Sánchez

ResultSet Interface Preguntas SQL devuelven un cursor “SELECT a,b,c FROM Table1” gives: 12345 Joe Komar 12.50 33333 Tom Sturm 350.35 55555 Jennifer Page 756.44 1/17/2019 David Gil Sánchez

ResultSet Sample Code ResultSet rs = stmt.executeQuery(“SELECT a,b,c FROM Table1”); while rs.next(){ int i = rs.getInt(“a”); String s = rs.getString(2); //se puede usar numero columna float f = rs.getFloat(“c”); System.out.println(i + “ “ + s + “ “ + f); } 1/17/2019 David Gil Sánchez

ResultSet Interface Métodos “get” para cada tipo de datos primitivo, y alguno más Se puede usar Object getObject(int col or String name) para obtener un tipo desconocido Object devuelto será un tipo correspondiente a los tipos de datos Java, según tabla de conversiones 1/17/2019 David Gil Sánchez

JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp 1/17/2019 David Gil Sánchez

ResultSetMetaData Interface Objecto creado a partir de un objeto ResultSet: ResultSet rs = stmt.executeQuery(…); ResultSetMetaData rsmd = rs.getMetaData(); Se usa para obtener información sobre los resultados obtenidos 1/17/2019 David Gil Sánchez

ResultSetMetaData Interface int numCols = rsmd.getColumnCount(); for (int i = 1; i <= numCols; i++){ int jdbcType = rsmdgetColumnType(i); String name = rsmd.getColumnTypeName(i); System.out.println(“Column “ + i + “is JDBC type “ + jdbcType + “, which is JDBC type “ + name); } 1/17/2019 David Gil Sánchez

ResultSetMetaData Interface String getColumnLabel(int col) -- heading String getColumnName(int col) -- name int getScale(int col) -- decimal places String getTableName(int col) -- table name boolean isCurrency(int col) -- cash value boolean isReadOnly(int col) -- read only etc. 1/17/2019 David Gil Sánchez