Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a...

30
Acceso a bases de datos SQL - JDBC Acceso Acceso a bases de a bases de datos datos SQL SQL - - JDBC JDBC CAPITULO IV CAPITULO IV POR POR Lic Adrian Quisbert Vilela Lic Adrian Quisbert Vilela

Transcript of Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a...

Page 1: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Acceso a bases de datosSQL - JDBC

AccesoAcceso a bases de a bases de datosdatosSQL SQL -- JDBCJDBC

CAPITULO IVCAPITULO IV

POR POR Lic Adrian Quisbert VilelaLic Adrian Quisbert Vilela

Page 2: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Sección de DatosSección de DatosSección de Datos

DBDBClienteCliente

Page 3: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Base de Datos SQLBase de Datos SQLBase de Datos SQL

•• Indispensables en la mayoría de las Indispensables en la mayoría de las aplicaciones C/Saplicaciones C/S

•• Fabricantes mas importantes:Fabricantes mas importantes:–– OracleOracle–– SybaseSybase–– InformixInformix–– IBMIBM–– MicrosoftMicrosoft

Page 4: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQLSQLSQL

•• Structured Query LanguageStructured Query Language–– IBM a comienzos de los ‘70sIBM a comienzos de los ‘70s–– Esta fuertemente basado en fundamentos Esta fuertemente basado en fundamentos

matemático de la teoría de conjuntos y matemático de la teoría de conjuntos y cálculo cálculo predicativo (predicate predicativo (predicate calculuscalculus))

–– SQL consiste de una lista pequeña, pero muy SQL consiste de una lista pequeña, pero muy flexible, de comandos que pueden ser utilizados flexible, de comandos que pueden ser utilizados para manipular información almacenada en para manipular información almacenada en tablas.tablas.

Page 5: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQLSQLSQL

•• El modelo relacional separa claramente los El modelo relacional separa claramente los aspectos físicos de los datos de su aspectos físicos de los datos de su representación lógica.representación lógica.

•• El modelo libera al programador de tareas El modelo libera al programador de tareas complicadas. Creación de rutinas de complicadas. Creación de rutinas de almacenaje, indexación, y recuperación de almacenaje, indexación, y recuperación de datos.datos.

Page 6: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQLSQLSQL

•• SQL es un lenguaje de consulta interactivoSQL es un lenguaje de consulta interactivoSELECT SELECT nronro, nombre FROM empleados, nombre FROM empleados

•• SQL es un lenguaje de programación de SQL es un lenguaje de programación de base de datos.base de datos.

•• SQL es un lenguaje de definición y SQL es un lenguaje de definición y administración de datos.administración de datos.

CREATE TABLE empleados (CREATE TABLE empleados (nro nro NUMBER(6), nombreNUMBER(6), nombre

VARCHAR(30) )VARCHAR(30) )

Page 7: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQLSQLSQL

• SQL es utilizado para intercomunicarnos con BD remotas

• SQL ayuda a la protección de datos en un ambiente multiusuario e interconectado.–– Validación de datosValidación de datos–– Integridad referencialIntegridad referencial–– rollbacksrollbacks–– lockinglocking automáticoautomático–– detección y resolución de detección y resolución de deadlocksdeadlocks

Page 8: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQL-89, SQL-92, SQL3SQLSQL--8989, SQL, SQL--92, SQL392, SQL3

•• El primer estandard nació en 1986. En 1989 El primer estandard nació en 1986. En 1989 fue revisado y se introdujo lo que fue revisado y se introdujo lo que conocemos como integridad referencia.conocemos como integridad referencia.–– SQLSQL--89 o ANSI SQL89 o ANSI SQL

Page 9: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQL-89, SQL-92, SQL3SQLSQL--89, 89, SQLSQL--9292, SQL3, SQL3

•• SQLSQL--92 (ISO), también conocido SQL2 92 (ISO), también conocido SQL2 data del año 1992. Es cinco veces mas data del año 1992. Es cinco veces mas extenso que le original SQLextenso que le original SQL--89.89.–– Estandariza muchos de los puntos que Estandariza muchos de los puntos que

anteriormente se dejaba al criterio de los anteriormente se dejaba al criterio de los fabricantes.fabricantes.

–– ISO: 3 niveles de acatamientos (ISO: 3 niveles de acatamientos (compliancecompliance) : ) : •• Básico (Básico (EntryEntry), intermedio y completo (full)), intermedio y completo (full)

Page 10: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQL-89, SQL-92, SQL3SQLSQL--89, SQL89, SQL--92, 92, SQL3SQL3

•• SQL3: mas de 2,000 páginas.SQL3: mas de 2,000 páginas.

•• Consiste de nueve partesConsiste de nueve partes

•• Aumenta un nAumenta un núúmero elevado de mero elevado de características y funciones a un estandard características y funciones a un estandard SQLSQL--92 que ya es complicado. No se estima 92 que ya es complicado. No se estima que los fabricantes adopten este estándar que los fabricantes adopten este estándar inmediatamente.inmediatamente.

Page 11: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Servicios de un DBSServicios de un DBSServicios de un DBS

•• Un Servidor de Base de Datos (también Un Servidor de Base de Datos (también llamado SQL llamado SQL engineengine) provee un acceso ) provee un acceso seguro a datos compartidos.seguro a datos compartidos.

•• Es multiusuario, provee control de Es multiusuario, provee control de concurrencia, seguridad, recuperación y concurrencia, seguridad, recuperación y consistencia.consistencia.

•• Mayor parte de ellos proveen como mínimo Mayor parte de ellos proveen como mínimo acatamiento a SQLacatamiento a SQL--89.89.

Page 12: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Arquitecturas SQLArquitecturas SQLArquitecturas SQL

•• Un proceso por clienteUn proceso por cliente–– Provee a cada cliente una conexión propia y su Provee a cada cliente una conexión propia y su

propio lugar en memoria (seguridad)propio lugar en memoria (seguridad)–– La base de datos corre en uno o mas procesos La base de datos corre en uno o mas procesos

en segundo plano.en segundo plano.–– Protege a los usuarios unos de otros, y protege Protege a los usuarios unos de otros, y protege

al administrador de datos de los usuarios.al administrador de datos de los usuarios.–– Los procesos pueden ser fácilmente asignados a Los procesos pueden ser fácilmente asignados a

difdif. procesadores en un equipo (SMP). procesadores en un equipo (SMP)

Page 13: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Arquitecturas SQLArquitecturas SQLArquitecturas SQL

•• Un procesoUn proceso--porpor--clientecliente

Proceso

DBProceso

Proceso

Servidor

Ejemplos: Informix, DB2, Oracle V6.

Page 14: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Arquitecturas SQLArquitecturas SQLArquitecturas SQL

•• MultiMulti--hebras de procesamientos hebras de procesamientos ((multithreadedmultithreaded))

–– Mejor rendimientoMejor rendimiento–– Todas la conexiones corren en un mismo Todas la conexiones corren en un mismo

espacio de memoria.espacio de memoria.–– No depende del sistema operativo para No depende del sistema operativo para

programación y control multitareas.programación y control multitareas.–– Problemas cuando un proceso cliente se Problemas cuando un proceso cliente se

comporta incorrectamente, afecta a todo el comporta incorrectamente, afecta a todo el servidor.servidor.

Page 15: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Arquitecturas SQLArquitecturas SQLArquitecturas SQL

•• MultiMulti--hebras de procesamientos hebras de procesamientos ((multithreadedmultithreaded))

DB

Servidor

Ejemplos: Sybase, SQL Server

Proceso

Multihebra

Page 16: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Arquitecturas SQLArquitecturas SQLArquitecturas SQL

•• Arquitectura HíbridaArquitectura Híbrida–– 3 componentes3 componentes

•• Proceso oyente Proceso oyente multimulti--hebras que asigna clientes a hebras que asigna clientes a los procesos despachantes.los procesos despachantes.

•• Procesos despachantes (insertan peticiones en una Procesos despachantes (insertan peticiones en una pila, reciben resultados y los envían a los clientes)pila, reciben resultados y los envían a los clientes)

•• Procesos servidoresProcesos servidores reusablesreusables compartidos que compartidos que satisfacen a las peticiones que esperan en la pila.satisfacen a las peticiones que esperan en la pila.

Page 17: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Arquitecturas SQLArquitecturas SQLArquitecturas SQL

•• Arquitectura HíbridaArquitectura Híbrida

Proceso

DBProceso

Proceso

Servidor

ListenerProgram

Proceso

Proceso

Proceso

Request/Response Queue

Shared Dispatcher Pool

Shared ServerProcess Pool

Ejemplos: Oracle 7, Oracle 8

Page 18: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQL MiddlewareSQL SQL MiddlewareMiddleware

DBDB

ODBCJDBC

ESQL

Page 19: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Acceso a Bases de Datos C/SAcceso a Bases de Datos C/SAcceso a Bases de Datos C/S

•• Embedded Embedded SQL (SQL incrustado)SQL (SQL incrustado)–– Es un estándar ISOSQLEs un estándar ISOSQL--9292

–– Se introducen comandos SQL en lenguajes de Se introducen comandos SQL en lenguajes de programación (C, Cobol, Pascal, etc.)programación (C, Cobol, Pascal, etc.)

–– Se necesita de un Se necesita de un precompilador precompilador que traduce los que traduce los comandos SQL en lenguaje que el compilador pueda comandos SQL en lenguaje que el compilador pueda entender.entender.

–– Ejemplo: En C un comando SQL incrustado en el Ejemplo: En C un comando SQL incrustado en el código debe comenzar con la palabra clave:código debe comenzar con la palabra clave:

•• EXEC SQL ……………… ;EXEC SQL ……………… ;

Page 20: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

Acceso a Bases de Datos C/SAcceso a Bases de Datos C/SAcceso a Bases de Datos C/S

•• EmbeddedEmbedded SQLSQL–– El gran problema de este método es que la base de El gran problema de este método es que la base de

datos a utilizarse tiene que ser conocida antes del datos a utilizarse tiene que ser conocida antes del desarrollo de la aplicación. Difícil de utilizar diferentes desarrollo de la aplicación. Difícil de utilizar diferentes bases de datos en tiempo de ejecución.bases de datos en tiempo de ejecución.

–– Los Los precompiladores precompiladores están cazados con una BD están cazados con una BD particular. Se tendrá que recompilar la aplicación para particular. Se tendrá que recompilar la aplicación para cada base de datos utilizada.cada base de datos utilizada.

Page 21: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQLJ - SQL incrustado en JavaSQLJ SQLJ -- SQL incrustado en JavaSQL incrustado en Java

•• 1997 1997 -- OracleOracle, IBM, Tandem comenzaron la , IBM, Tandem comenzaron la implementación ESQL para Java llamado SQLJ.implementación ESQL para Java llamado SQLJ.–– SQLJ nos permite introducir comandos SQL en los SQLJ nos permite introducir comandos SQL en los

programas Java.programas Java.

–– En muchas maneras es mas fácil utilizar que JDBC y En muchas maneras es mas fácil utilizar que JDBC y tiene mejor soporte para su verificación durante tiempo tiene mejor soporte para su verificación durante tiempo de compilación.de compilación.

–– Es muy importante porque Es muy importante porque eses utilizado para escribir utilizado para escribir ““stored proceduresstored procedures” basados en Java.” basados en Java.

Page 22: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

SQL Call-Level Interface (CLI)SQL SQL CallCall--Level Interface Level Interface (CLI)(CLI)

•• Es un SQL API (Es un SQL API (Application Programming Application Programming InterfaceInterface))–– No necesita ser No necesita ser prepre--compilado.compilado.

–– En teoría se lo puede utilizar para crear En teoría se lo puede utilizar para crear aplicaciones aplicaciones portablesportables..

–– En la práctica las cosas no son tan simplesEn la práctica las cosas no son tan simples

Page 23: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

ODBC CLI de MicrosoftODBC CLI de MicrosoftODBC CLI de Microsoft

•• Ver. 3.5 (1998)Ver. 3.5 (1998)–– Es un interfaz de programación que permite a Es un interfaz de programación que permite a

las aplicaciones las aplicaciones accesaraccesar a bases de datos a bases de datos utilizando SQLutilizando SQL

–– Cada proveedor de Bases de Datos aumentan Cada proveedor de Bases de Datos aumentan extensiones propias al “extensiones propias al “driverdriver”, lo que ”, lo que nuevamente nos conduce al problema de nuevamente nos conduce al problema de portabilidad.portabilidad.

Page 24: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

CLI’s orientados a ObjetosCLI’s orientados a ObjetosCLI’s orientados a Objetos

•• JDBC y OLE DBJDBC y OLE DB–– Ambos proveen un CLI que se accesa mediante Ambos proveen un CLI que se accesa mediante

el uso de interfaces orientado a objetos (y el uso de interfaces orientado a objetos (y classesclasses) en reemplazo de ) en reemplazo de APIs procedimentalesAPIs procedimentales..

•• JDBC (Java JDBC (Java Database ConnectivityDatabase Connectivity))–– 100% java100% java

–– Permite escribir código Java Permite escribir código Java independientemente de la Base de Datos en uso.independientemente de la Base de Datos en uso.

Page 25: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

JDBCJDBCJDBC

•• Al igual que ODBC, provee dos conjuntos Al igual que ODBC, provee dos conjuntos de interfaces:de interfaces:–– Interfaz de Aplicación (para el clientes)Interfaz de Aplicación (para el clientes)

–– Interfaz “Interfaz “driverdriver”que los proveedores de RDMS ”que los proveedores de RDMS deben adaptar a su base de datos particular.deben adaptar a su base de datos particular.

–– JDBC utiliza un manejador de “JDBC utiliza un manejador de “driversdrivers” que ” que automáticamente carga el “automáticamente carga el “driverdriver” correcto para ” correcto para hablar con determinada BD.hablar con determinada BD.

Page 26: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

JDBCJDBCJDBC

•• 4 tipos de 4 tipos de driversdrivers–– Tipo 1 JDBCTipo 1 JDBC--ODBC ODBC bridgebridge

•• Utiliza ODBC (OK para FoxPro, Access, etc)Utiliza ODBC (OK para FoxPro, Access, etc)•• No es aconsejable para aplicaciones grandes. Se No es aconsejable para aplicaciones grandes. Se

pierde tiempo en comunicación JDBCpierde tiempo en comunicación JDBC--ODBC.ODBC.•• Funciones limitadas (dependientes de ODBC) Funciones limitadas (dependientes de ODBC)

–– Tipo 2 Tipo 2 NativeNative--API API PartlyPartly--JavaJava–– Tipo 3 Tipo 3 NetNet--Protocol AllProtocol All--JavaJava–– Tipo 4 Tipo 4 NativeNative--Protocol AllProtocol All--JavaJava

Page 27: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

JDBCJDBCJDBC

ORACLEODBC

DB

Sybase

Oracle DriverODBC DRIVER

Sybase Driver

JDBC-ODBCBridge

Driver Manager

ResultSetResultSet

StatementStatement

ConnectionConnection

ResultSetResultSet

Prepared Stat.Prepared Stat.

ResultSetResultSet

Callable Stat.Callable Stat.

Aplicación

Page 28: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

OLE DB y ADOOLE DB y ADOOLE DB y ADO

DatosMulti-Dimensionales

Servidor OLAP

OLAP Engine

Aplicaciones y Herramientas

ActiveX Data Objects (ADO)

QueryEngine

CursorEngine

...

Datos de Directorio

Servidor de Directorios

Datos Hojas deCálculo

Hojas de Cálculo

Datos Archivos

Servidor deArchivos

Datos SQL

Proveedores ODBCProveedores

de Datos

Servicios

Interfaces OLE DB

Interfaces OLE DB

Page 29: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

JDBC en la prácticaJDBC en la JDBC en la prácticapráctica

•• Cargar unCargar un driverdriver especificoespecifico::ClassClass..forNameforName(“(“sunsun..jdbcjdbc..odbcodbc..JdbcOdbcDriverJdbcOdbcDriver”)”);;

•• Solicitamos Solicitamos al al manejador manejador de drivers la de drivers la apertura apertura de de una conexiónuna conexiónConnection con = Connection con =

DriverManagerDriverManager..getConnectiongetConnection(“(“jdbcjdbc::odbcodbc::somedbsomedb”, “user”, “”, “user”, “passwdpasswd”);”);

Page 30: Acceso a bases de datos SQL - JDBCvirtual.usalesiana.edu.bo/web/conte/archivos/492.pdf · Acceso a bases de datos SQL - JDBC Acceso a bases de datos SQL ... – Esta fuertemente basado

JDBC en la prácticaJDBC en la prácticaJDBC en la práctica

•• EjecutamosEjecutamos un un comandocomando SQLSQLStatement stmt = con.Statement stmt = con.createStatementcreateStatement;;

ResultSet rsResultSet rs = stmt.= stmt.executeQueryexecuteQuery(“select * from (“select * from clientesclientes”);”);

•• Recuperamos datosRecuperamos datoswhile(while(rsrs.next()) {.next()) {

String String nombre nombre = = rsrs..getStringgetString(“(“nomClientenomCliente”);”);

}}