Bases de Datos - unican.es · Username y Password de la BD • El enlace de la base de datos con el...

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 - unican.es · Username y Password de la BD • El enlace de la base de datos con el...

Page 1: Bases de Datos - unican.es · 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

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 - unican.es · 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

Objetivo

• Presentar de forma básica JDBC

Bases de Datos 2

Page 3: Bases de Datos - unican.es · 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

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 - unican.es · 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

¿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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

Tablas de la BD Books

Bases de Datos 18

Page 19: Bases de Datos - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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 - unican.es · 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

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.