Mdulo ECI 11 Fundamentos de Redes de Computadores

  • Slides: 29
Download presentation
Módulo ECI - 11: Fundamentos de Redes de Computadores Java Database Connectivity JDBC h.

Módulo ECI - 11: Fundamentos de Redes de Computadores Java Database Connectivity JDBC h. JDBC es una API, formada por conjunto de clases e interfaces en el lenguaje de programación Java, para ejecutar sentencias SQL sobre una base de datos (externa). h. Ofrece un estándar de conexión a cualquier base de datos disponible en el mercado. h. Permite obtener los datos en forma fácil y cómoda en ambientes cliente-servidor a través de Internet/Intranet. Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores ¿Qué hace JDBC? h. Permite

Módulo ECI - 11: Fundamentos de Redes de Computadores ¿Qué hace JDBC? h. Permite establecer una conexión a una base de datos. h. Permite enviar sentencias SQL. h. Permite procesar los resultados de estas sentencias. h. Las clases que permiten esto están en el paquete java. sql (hay que importarlo) Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Modelos de acceso a BD

Módulo ECI - 11: Fundamentos de Redes de Computadores Modelos de acceso a BD h De 2 capas Cliente >La aplicación “habla” directamente con Aplicación la base de datos. Java >Controlador JDBC se comunica con el JDBC sistema específico que maneja la base de datos. Protocolo BD >La base de datos puede estar en otra máquina, con lo que el cliente se DBMS comunica por red. Esta es la configuración llamada cliente/servidor. Servidor BD 3 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Modelos de acceso a BD

Módulo ECI - 11: Fundamentos de Redes de Computadores Modelos de acceso a BD Cliente (GUI) h De 3 capas >Los comandos son enviados a la capa intermedia de servicios, la cual envía Llamadas HTTP, RMI, CORBA sentencias SQL a la base de datos. Ésta Aplicación Servlets las procesa y envía los resultados de vuelta a la capa intermedia, para luego JSP Java ser enviados al cliente. EJB JDBC >Permite un control de acceso y de Protocolo actualización. BD >Provee ventajas de performance. Applet en Java o Navegador HTML DBMS Servidor BD 4 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Arquitectura JDBC h Hay 4

Módulo ECI - 11: Fundamentos de Redes de Computadores Arquitectura JDBC h Hay 4 formas distintas de establecer una conexión entre un programa java y una base de datos > Usando la ODBC (creado por microsoft para brindar una API estándar para comunicarse con bases de datos en una plataforma windows > Usando un driver JDBC que se comunica con un driver desarrollado por la compañía que desarrollo el DBMS (que puede estar en cualquier lenguaje) > Lo mismo, pero con el driver desarrollado por la compañía en java > Lo mismo, pero el driver desarrollado por la compañía se comunica con uno “nativo” y este con la base de datos 5 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Arquitectura JDBC Programa Java API

Módulo ECI - 11: Fundamentos de Redes de Computadores Arquitectura JDBC Programa Java API JDBC Base de Datos Punete JDBCODBC Api del proveedor En el cliente Driver JDBC Driver Servidor JDBC En elservidor 6 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Categorías de los controladores JDBC

Módulo ECI - 11: Fundamentos de Redes de Computadores Categorías de los controladores JDBC h. Puente JDBC-ODBC. h. Parte API Nativa-Parte Java. Se convierte las llamadas JDBC al sistema de la Base de datos. h. JDBC-Red. Es sólo Java. Las llamadas JDBC son convertidas a un protocolo de red independiente del sistema de la base de datos. Este protocolo es convertido en un servidor h. Protocolo Nativo. Es sólo Java. Se usa un protocolo de red con la BD. 7 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Cargando el Driver h. Es

Módulo ECI - 11: Fundamentos de Redes de Computadores Cargando el Driver h. Es necesario primero cargar una clase con el driver de la base de datos (esto lo provee el vendedor de la DBMS) h. Ejemplo: Class c = Class. for. Name(“com. informix. jdbc. Ifx. Driver"); Calss. for. Name(“com. novell. sql. LDAPDriver”); Class. for. Name("com. mysql. jdbc. Driver"); h. Esto es particular según la base de datos que se usa h. Luego hay que crear una instancia de la clase c. new. Instance(); 8 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Estableciendo la Conexión Connection con

Módulo ECI - 11: Fundamentos de Redes de Computadores Estableciendo la Conexión Connection con = Driver. Manager. get. Connection ( url, "login", "password"); h. En los ejemplos omitiremos login y password h. Un objeto “Connection” representa una conexión a una base de datos. h. La clase “Driver. Manager” intenta ubicar el controlador que pueda conectarse a la base de datos representada en la URL. 9 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Conexión h. Ejemplos de URL:

Módulo ECI - 11: Fundamentos de Redes de Computadores Conexión h. Ejemplos de URL: >jdbc: mysql: //localhost/test (para ejemplos) >jdbc: oracle: //oraserver >jdbc: odbc: mydatabase >jdbc: informixsqli: //hostname: port/dbname: INFORMIXSER VER=server. Name (para las bases CGE) >jdbc: ldap: //server; base. DN=base. DN; use. Cleart ext=true 10 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores . . . Conexión h.

Módulo ECI - 11: Fundamentos de Redes de Computadores . . . Conexión h. Sintáxis de una URL JDBC: >jdbc: <subprotocolo>: <subnombre> ><subprotocolo> es el nombre del controlador o del mecanismo de conexión. Ejemplo: odbc. ><subnombre> es la identificación de la base de datos. El formato varia según el controlador especificado. Ejemplo: //servidor: puerto/bd y parámetros 11 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Enviando sentencias SQL h. JDBC

Módulo ECI - 11: Fundamentos de Redes de Computadores Enviando sentencias SQL h. JDBC permite enviar cualquier tipo de sentencia SQL. Aunque ésta fuera dependiente de la base de datos sólo se correría el riesgo de incompatibilidad al cambiar de base de datos. 12 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores . . . Enviando sentencias

Módulo ECI - 11: Fundamentos de Redes de Computadores . . . Enviando sentencias SQL h. JDBC provee 3 clases: >“Statement”: Este objeto es usado para enviar sentecias SQL simples. Es creado por el método “create. Statement”. >“Prepared. Statement”: Este objeto es usado para sentencias que requieren uno o más parámetros. La sentencia es precompilada y guardada para uso futuro. >“Callable. Statement”: Es usado para ejecutar procedimientos almacenados en la base de datos. 13 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores La clase Statement h. Statement

Módulo ECI - 11: Fundamentos de Redes de Computadores La clase Statement h. Statement stmt = con. create. Statement(); h. En este momento la statement existe pero no tiene una sentencia SQL para ejecutar. Esta se puede pasar con los métodos >execute. Update(String), usada para crear/modificar tablas (no hay resultados), típicamente para create, update, delete. . . >execute. Query(String) para hacer consultas, retornan resultados en un objeto de la clase Result. Set, típicamente para select 14 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Ejemplos de excute. Update h

Módulo ECI - 11: Fundamentos de Redes de Computadores Ejemplos de excute. Update h stmt. execute. Update(“create table alumno (nombre varchar(32), matricula integer, direccion varchar(40), añonac integer, . . . ); h stmt. execute. Update(“insert into alumnos (‘Valeria Valencia ’, 00998852678, ‘Calle bonita 223 Vitacura Stgo’, 1974, . . . ); h stmt. execute. Update(“update alumnos set direccion = ‘? ? ? ’ where nombre = ‘Valeria Valencia’ ”); 15 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Ejemplos de excute. Update •

Módulo ECI - 11: Fundamentos de Redes de Computadores Ejemplos de excute. Update • Create. Coffees: crea tabla Coffees en base de datos test • Create. Suppliers: igual pero tabla Suppliers • Drop. Coffees: Borra ambas tablas • My. Connection: encapsula la conexión a la base de datos (para usarla en los otros programas) • Insert. Coffees: inserta filas en la tabla • Insert. Supliers: inserta filas en la tabla • Insert. Coffees. Datos: inserta filas a partir de datos leidos desde un archivo • List. Coffes, List. Suppliers: muestran el contenido (usan execute. Query) 16 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Retorno de excute. Update •

Módulo ECI - 11: Fundamentos de Redes de Computadores Retorno de excute. Update • El método excute. Update retorna un valor entero correspondiente al número de filas que la sentencia SQL modificó • Si se trataba de una creación de tablas el valor de retorno es 0 • Si se trata de insertar una fila el valor es 1 • El resultado es interesante cuando se usa en una sentencia SQL con la instrucción “update tabla set campo = <expresión> where <condicion> 17 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Ejemplos de excute. Query h

Módulo ECI - 11: Fundamentos de Redes de Computadores Ejemplos de excute. Query h stmt. execute. Query(“select * from alumnos “ + “where añonac = 1974”); h. Los resultados de una consulta se reciben en un objeto de la clase Result. Set h. Result. Set rs = stmt. execute. Query(. . ); h. Un Result. Set se puede ver como una enumeración de filas que representan el resultado h. Existen métodos adecuados para recorrer los elementos de esta enumeración y recuperar los valores de las columnas (campos) 18 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores El Result. Set rs =

Módulo ECI - 11: Fundamentos de Redes de Computadores El Result. Set rs = stmt. execute. Query(“select nombre where direccion like Santiago”); while (rs. next()) { String s = rs. get. String(“nombre”); int y = rs. get. Int(“año”); System. out. println(s+” “+y); } h Result. Set rs contiene una colección de filas con los resultados de la pregunta. La instrucción next avanza un puntero que indica en qué fila estamos actualmente. Al principio está antes de la primera fila, por lo cual se hace necesario ejecutar un next() para situarse en la primera 19 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores La instrucción get. XXX h.

Módulo ECI - 11: Fundamentos de Redes de Computadores La instrucción get. XXX h. Se puede usar con 2 tipos de parámetros: >get. XXX(“nombre de columna en la tabla”) ej get. String(“nombre”) >get. XXX(número de columna en la tabla) ej get. String(1) hget. XXX trata de leer lo que hay en la columna y convertirlo al tipo Java especificado en XXX 20 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores La instrucción get. XXX h.

Módulo ECI - 11: Fundamentos de Redes de Computadores La instrucción get. XXX h. Hay veces en que si bien, el tipo SQL no es el mismo que el tipo XXX una conversión es posible sin problemas (por ejemplo, con get. String y get. Object se puede recuperar sin problemas cualquier cosa) h. Otras, en que la conversión es posible pero con pérdida de información o con posible problema de formateo (ej get. Byte para un numeric o un longvarchar h. Otras, es simplemente imposible (un get. Long para Time) 21 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Prepared Statements h Donde se

Módulo ECI - 11: Fundamentos de Redes de Computadores Prepared Statements h Donde se ha usado Satement es generalmente posible usar Prepared. Statement para hacer más eficientes las consultas h Una instrucción con Prepared. Statement va a ser, en la mayoría de los casos, traducida a una consulta SQL nativa de la base de datos en tiempo de compilación h La otra ventaja es que es posible usar parámetros dentro de ella, pudiendo hacer más flexibles las consultas o hacer varias consultas distintas dentro de un ciclo cambiando el valor de algunas variables h Prepared. Statement us = con. prepare. Satatement(“update alumnos set comuna = ? where direccion like = ? ); h us. set. String(1, ’Vitacura’) us. set. String(2, ’Hualtatas’); 22 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Prepared Statements: Ejemplo Prepared. Statement

Módulo ECI - 11: Fundamentos de Redes de Computadores Prepared Statements: Ejemplo Prepared. Statement update. Sales; String update. String = "update COFFEES " + "set SALES = ? where COF_NAME like ? "; update. Sales = con. prepare. Statement(update. String); int [] sales. For. Week = {175, 150, 60, 155, 90}; String [] coffees = {"Colombian", "French_Roast", "Espresso", "Colombian_Decaf", "French_Roast_Decaf"}; int len = coffees. length; for(int i = 0; i < len; i++) { update. Sales. set. Int(1, sales. For. Week[i]); update. Sales. set. String(2, coffees[i]); update. Sales. execute. Update(); } 23 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Transacciones h. Una transacción consiste

Módulo ECI - 11: Fundamentos de Redes de Computadores Transacciones h. Una transacción consiste en una o más sentencias que han sido ejecutadas y luego confirmadas (commit) o deshechas (rolled back) h. Auto-commit está preseteado. h. Si Auto-commit está desactivado se debe usar los métodos “commit” o “rollback” explícitamente. 24 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Transacciones h. Para hacer uso

Módulo ECI - 11: Fundamentos de Redes de Computadores Transacciones h. Para hacer uso de transacciones debe primero dessetearse elauto-commit >con. set. Auto. Commit(false) >Prepared. Statement ps =. . . >ps. execute. Update(). . >ps. excecute. Update(). . . >con. commit(); 25 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Stored Procedures h. Es un

Módulo ECI - 11: Fundamentos de Redes de Computadores Stored Procedures h. Es un grupo de sentencias SQL que se agrupan lógicamente en una unidad para efectuar una determinada tarea h. Existen en la mayoría de los DBMS pero son dependientes de estas (no es muy estándar la forma cómo se escriben/ejecutan) h. Generalmente reciben parámetros h. Se “escriben” con un Update y se ejecutan con un Query 26 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Un ejemplo Para crear el

Módulo ECI - 11: Fundamentos de Redes de Computadores Un ejemplo Para crear el Stored Procedure String crear. SP = “create prodcedure SHOW_SUPPLIERS”+ “ as ”+ “select SUPPLIERS. SUP_NAME, COFFEES. COF_NAME”+ “from SUPPLIERS, COFFEES ”+ “where SUPPLIERS. SUP_ID = COFFEES. SUP_ID” Statement stmt = con. Create. Statement(); stmt. execute. Query(create. SP); Para llamar el Stored Procedure Callable. Statement cs; cs = con. prepare. Call(“{call SHOW_SUPPLIERS}”); Result. Set rs = cs. execute. Query(); 27 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Usando los metadatos h Los

Módulo ECI - 11: Fundamentos de Redes de Computadores Usando los metadatos h Los metadatos son la información acerca de la estructura de una Base de Datos o un Result. Set h Se obtiene con el método get. Meta. Data() stmt = con. create. Statement(); Result. Set rs = stmt. execute. Query(query); Result. Set. Meta. Data rsmd = rs. get. Meta. Data(); int number. Of. Columns = rsmd. get. Column. Count(); int row. Count = 1; while (rs. next()) { System. out. println("Row " + row. Count + ": "); for (int i = 1; i <= number. Of. Columns; i++) { System. out. print(" Column " + i + ": "); System. out. println(rs. get. String(i)); } System. out. println(""); row. Count++; } 28 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl

Módulo ECI - 11: Fundamentos de Redes de Computadores Usando los metadatos h Ejemplo

Módulo ECI - 11: Fundamentos de Redes de Computadores Usando los metadatos h Ejemplo para conocer las tablas de una Base de Datos Database. Meta. Data dbmd = con. get. Meta. Data(); String dbms. Name = dbmd. get. Database. Product. Name(); Result. Set rs = dbmd. get. Table. Types(); System. out. print("The following types of tables are "); System. out. println("available in " + dbms. Name + ": "); while (rs. next()) { String table. Type = rs. get. String("TABLE_TYPE"); System. out. println(" " + table. Type); } 29 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec. uchile. cl