Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf ·...

29
Bases de Datos Introducción a la Conectividad de Bases de Datos con Java (JDBC) Bases de Datos con Java (JDBC) Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria [email protected]

Transcript of Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf ·...

Page 1: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Bases de Datos Introducción a la Conectividad de

Bases de Datos con Java (JDBC)Bases de Datos con Java (JDBC)

Pedro CorcueraDpto. Matemática Aplicada y Ciencias de la Computación

Universidad de Cantabria

[email protected]

Page 2: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Objetivo

• Presentar de forma básica JDBC

Bases de Datos 2

Page 3: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Indice

• ¿Qué es JDBC?

• Puente JDBC-ODBC

• Tipos de Controladores (drivers) de JDBC

• Pseudocódigo JDBC

Bases de Datos 3

• Pseudocódigo JDBC

• Ejemplo Java

• Metadatos

Page 4: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

¿Qué es JDBC?

• JDBC es una interface que permite a un programa en

Java ejecutar instrucciones SQL dentro de bases de

datos relacionales

– las bases de datos deben seguir el estandar ANSI SQL-2

Bases de Datos 4

Page 5: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

JDBC en acción

Programa

Java conectividad

utilidades proceso

JDBCdriver

para Oracle

Bases de Datos 5

de datos driver

para Sybase

jdbc-odbc

pruenteodbc

driver

Page 6: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

El puente JDBC-ODBC

• ODBC (Open Database Connectivity) es un estandar

Microsoft de mediados de los 1990’s.

• Es una API que permite a programas C/C++ ejecutar

SQL dentro de bases de datos

• ODBC es soportado por muchos productos

Bases de Datos 6

• ODBC es soportado por muchos productos

• El puente JDBC-ODBC permite que programas Java

usen la interface C/C++ de ODBC– significa que JDBC puede acceder muchas BBDD

• Las capas de conversión (Java --> C --> SQL)

pueden ralentizar la ejecución

Page 7: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

El puente JDBC-ODBC

• El puente JDBC-ODBC viene gratis con el JDK:– llamado sun.jdbc.odbc.JdbcOdbcDriver

• El driver ODBC driver para Microsoft Access viene

con MS Office

Bases de Datos 7

con MS Office– por ello es fácil conectar Java y Access

Page 8: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Tipos de driver JDBC

• Puente JDBC-ODBC– traslada Java al ODBC API

• API nativo– traslada Java a la propia base de datos de la API

• Protocolo nativo

Bases de Datos 8

• Protocolo nativo– utiliza Java para acceder a la base de datos de manera

más directa con sus protocolos de bajo nivel

• Protocolo de Red

– utiliza Java para acceder a la base de datos a través del

middleware de red (generalmente TCP / IP)

– necesarios para las aplicaciones en red

Page 9: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Pseudocódigo JDBC

• Todos los programas JDBC hacen lo siguiente:– cargar el controlador JDBC

– especificar el nombre y la ubicación de la base de datos

que se utiliza

– Conectar a la base de datos con un objeto

Bases de Datos 9

– Conectar a la base de datos con un objeto Connection

– Ejecutar una consulta SQL usando un objeto Statement

– Obtener los resultados en un objeto ResultSet

– Terminar cerrando los objetos ResultSet,

Statement y Connection

Page 10: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Pseudocódigo JDBC - Diagrama

DriveManager Connection Statement ResultSetcrea crea crea

SQL datos

Bases de Datos 10

Driver

SQL datos

enlaza al

driver

Page 11: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

DriveManager

• Es responsable de establecer la conexión con la base

de datos a través del controlador

• Ejm.:Class.forName(

"sun.jdbc.odbc.JdbcOdbcDriver");

Bases de Datos 11

"sun.jdbc.odbc.JdbcOdbcDriver");

Connection conn =

DriveManager.getConnection(url);

Page 12: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Nombre de la base de datos

• El nombre y la ubicación de la base de datos se

realiza mediante una URL– los detalles de la dirección varían dependiendo del tipo de

base de datos que se está utilizando

jdbc:odbc: //host.domain.com: 2048 /data/file

Bases de Datos 12

• Ejm.:jdbc:odbc:Books

jdbc:odbc: //host.domain.com: 2048 /data/file

Protocolo de

comunicación

Máquina que

contiene la BD

Puerto usado

para la conexión

Path de la BD

en la máquina

Page 13: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Objeto Statement

• El objeto Statement proporciona un 'espacio de

trabajo "donde las consultas SQL se pueden crear,

ejecutar, y recoger los resultados

• Ejm.:Statement st =

Bases de Datos 13

Statement st =

conn.createStatement() ;

ResultSet rs = st.executeQuery(

″ select * from Authors ″ );

:

st.close();

Page 14: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Objeto ResultSet

• Almacena los resultados de una consulta SQL

• Un objeto ResultSet es similar a una ‘tabla’ de

respuestas que se puede examinar moviendo un

‘puntero’ (cursor)

Bases de Datos 14

• Operaciones Cursor:

– first(), last(), next(), previous(), etc.

• Typical code:

while( rs.next() ) {

// procesar la fila;

}

23

5

17

98

Juan

Marcos

Pablo

Pedro

cursor

Page 15: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Programa SimpleJDBC.java

// SimpleJDBC.java

// Muestra los nombre y apellidos

// de la tabla Autores en la BD Books

import java.sql.*;

public class SimpleJDBC {

Bases de Datos 15

public class SimpleJDBC {

public static void main(String[] args)

{ // La URL para la BD Books

// ’Protected' por un login y password

String url = "jdbc:odbc:Books";

String username = "anonymous";

String password = "guest";

:

Page 16: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Programa SimpleJDBC.java

try {// carga el drive JDBC-ODBC Bridge Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// conecta con la db usando DriverManager Connection conn=DriverManager.getConnection(url,

username, password );// crea un objeto statement

Statement statement = conn.createStatement();

Bases de Datos 16

Statement statement = conn.createStatement

// Ejecuta la consulta SQL

ResultSet rs = statement.executeQuery( "SELECT lastName, firstName FROM Authors" );

// imprime resultados

while( rs.next() )System.out.println( rs.getString("lastName")+ ", "+

rs.getString("firstName") );

// Cierre

statement.close();conn.close();}

Page 17: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Programa SimpleJDBC.java

catch ( ClassNotFoundException cnfex ) {

System.err.println(

"Error en la carga del driver JDBC/ODBC");

cnfex.printStackTrace();

System.exit( 1 ); // termina el programa

}

Bases de Datos 17

}

catch ( SQLException sqlex ) {

System.err.println( sqlex );

sqlex.printStackTrace();

}

} // fin de main()

} // fin de la clase SimpleJDBC

Page 18: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Tablas de la BD Books

Bases de Datos 18

Page 19: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Username y Password de la BD

• El enlace de la base de datos con el exterior (por

ejemplo, su interfaz ODBC) debe configurarse para

tener un nombre de usuario y contraseña

• Para ello:

Bases de Datos 19

– En Panel de Control → "Herramientas administrativas"

hacer doble clic en "Orígenes de datos (ODBC)"

Page 20: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Username y Password de la BD

• El DSN de usuario es un origen de datos específica del usuario que se almacena localmente y disponible sólo

Bases de Datos 20

localmente y disponible sólo para el usuario • El DSN de sistema es un origen de datos visible para todos los usuarios de un equipo incluidos los servicios NT

Page 21: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Username y Password de la BD

Bases de Datos 21

• Pulsar “Agregar” para añadir una fuente de datos y seleccionarMicrosoft Access Driver (*.mdb, *.accdb). Pulsar “Finalizar”.

Page 22: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Username y Password de la BD

Bases de Datos 22

• Escribir en Nombre del origen de datos y Descripción y pulsar en “Seleccionar” para buscar el camino al fichero BD Books.accdb o Books.mdb. • Después pulsar en “Avanzadas”

Page 23: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Username y Password de la BD

Bases de Datos 23

• Escribir en Nombre de inicio de sesiónanonymous y en Contraseña guest

• Pulsar en “Aceptar”

Page 24: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Tipos de BD Access

• En Access 2007, el formato del fichero estandar de la

base de datos es ".accdb"

– usar Books.accdb si se tiene Access 2007 en el

ordenador

Bases de Datos 24

• En versiones anteriores de Access (p.e. Access

2003), el formato del fichero es ".mdb"

– usar Books.mdb se se tiene una versión anterior de

Access en el ordenador

Page 25: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Windows 7 y ODBC Access Driver

• En Panel de Control → “Sistema y Seguridad”→

“Herramientas administrativas”→ “Orígenes de datos

ODBC”

• También se puede usar "odbcad32.exe" que se

encuentra en:

Bases de Datos 25

encuentra en:

– C:\Windows\SysWOW64\ C:\Windows\System32

(para Windows 7, 64 bit) (para Windows 7, 32 bit)

• Si el driver no se encuentra en la versión de W7 se

puede descargar MDAC 2.8 de: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=78cac895-efc2-4f8e-a9e0-3a1afbd5922e

Page 26: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Acceso a ResultSet

• La clase ResultSet contiene muchos métodos

para el acceso al valor de una columna de un registro

en curso– puede usar el nombre o posición de la columna

– p.e. para obtener el valor en la columna lastName :

Bases de Datos 26

– p.e. para obtener el valor en la columna lastName :rs.getString("lastName")

• Los valores son datos SQL, y deben ser convertidos a

los tipos/objetos Java

• Hay varios métodos para acceder/convertir datos,– p.e. getString(), getDate(), getInt(), getFloat(), getObject()

Page 27: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

MetaDatos

• Los metadatos es la información sobre la base de

datos:

– p.e. el número de columnas, los tipos de las columnas

– meta datos es la información del esquema

Bases de Datos 27

ID Nombre Curso Nota

007 James Bond Cocina 99

008 Mario Bross Repostería 1

meta data

Page 28: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Acceso a MetaDatos

• El método getMetaData() se puede usar en un

objeto ResultSet para crear su objeto meta datos.

• p.e.ResultSetMetaData md = rs.getMetaData();

:

Bases de Datos 28

:

int numCols = md.getColumnCount();

for (int i = 0; i <= numCols; i++) {

if (md.getColumnType(i) == Types.CHAR)

System.out.println(

md.getColumnName(i) )

}

Page 29: Bases de Datos - personales.unican.espersonales.unican.es/corcuerp/BDT/Slides/Intro_JDBC.pdf · Bases de Datos 3 • Ejemplo Java • Metadatos ¿Qué es JDBC? ... • Las capas de

Más métodos para acceso a MetaDatos

• getTableName()

• getPrecision()

– número de dígitos decimales en la columna

• isSigned()

– retorna true si la comuna tiene números con signo

Bases de Datos 29

– retorna true si la comuna tiene números con signo

• isCurrency(), etc.