PDF de programación - LPS: Acceso a Bases de Datos

Imágen de pdf LPS: Acceso a Bases de Datos

LPS: Acceso a Bases de Datosgráfica de visualizaciones

Publicado el 5 de Octubre del 2020
480 visualizaciones desde el 5 de Octubre del 2020
1,0 MB
25 paginas
Creado hace 12a (16/05/2011)
Federico Peinado
www.federicopeinado.es

Depto. de Ingeniería del Software e
Inteligencia Artificial
disia.fdi.ucm.es

Facultad de Informática
www.fdi.ucm.es

Universidad Complutense de Madrid
www.ucm.es

 Base de datos (BBDD)

• Conjunto de información organizada de forma independiente a su

tratamiento y a los detalles de su almacenamiento físico

 Modelo de datos

• Estructura lógica de los datos y conjunto de operaciones que

permiten crearlos, consultarlos y modificarlos

• El más utilizado es el relacional (datos organizados en tablas)

 Lenguaje de acceso

• El más utilizado es SQL (creación, consulta y modificación de

BBDD relacionales)

 Sistema gestor de bases de datos (SGBD)

• Aplicación para crear, mantener y consultar BBDD
• El código de las aplicaciones que usan BBDD no debería depender

de los detalles particulares de los SGBDs
 Necesidad de algún API estándar para conectar con SGBDs

Laboratorio de Programación de Sistemas – Acceso a bases de datos

2

 Existen muchas, habitualmente cada proveedor de
SGBDs ofrece una propia para acceder a sus BBDD

 Protocolos propietarios

• Dependen del proveedor del SGBD
• Dependen del lenguaje de programación que se quiera utilizar

 Plataforma Microsoft

• ODBC (Open DataBase Connectivity)

 Protocolo de conexión basado en parte del estándar SQL/CLI (API en C)

• OLE/ADO DB
• ADO .NET
• ADO .NET + LINQ

 Plataforma Java

• JDBC (Java DataBase Connectivity)

Laboratorio de Programación de Sistemas – Acceso a bases de datos

3

Laboratorio de Programación de Sistemas – Acceso a bases de datos

4

 Paquete Java ubicado en java.sql

• Versiones 1.0, 2.0, 3.0 y 4.0

(la actual, ya incluida en el JDK 6)

• Proporciona una pasarela JDBC ODBC

 Mecanismos básicos

1. Conectarse a una fuente de datos

 Para ello la fuente de datos debe incluir un driver JDBC

(u ODBC, necesitando entonces usar la pasarela)

2. Consultar/cambiar tablas en las BBDD de la fuente

 Se usa SQL “embebido” en los parámetros (Strings) de
ciertos métodos definidos en las clases de este paquete
 El resultado son objetos Java, definidos en el paquete

Laboratorio de Programación de Sistemas – Acceso a bases de datos

5

Cliente BD  Servidor BD  BD

• El cliente no necesita saber nada sobre como

funcionan los controladores de BBDD
 Programación independiente de la plataforma
• JDBC tiene dos capas
1. API de JDBC
2. API del Administrador de Controladores JDBC
 Los distribuidores de BBDD deben construir sus
controladores (drivers) siguiendo los requisitos de
esta segunda API

Laboratorio de Programación de Sistemas – Acceso a bases de datos

6

Debido a su diseño, los programadores

sólo necesitan conocer la capa Java/JDBC

Esquema de comunicación

(entre JDBC y una base de datos)
• Aplicación Java  Administrador de

Controladores de JDBC 
1.  Pasarela JDBC/ODBC  Controlador ODBC 

Base de datos

2.  Controlador JDBC suministrado por el fabricante

 Base de datos

Laboratorio de Programación de Sistemas – Acceso a bases de datos

7

 Controlador Tipo 1

• Traduce JDBC a ODBC y utiliza el controlador ODBC

para comunicar con la base de datos

• Oracle incluye uno de estos controladores en el JDK:

la pasarela JDBC/ODBC

• Requiere la configuración específica de un

controlador ODBC…
 Controlador Tipo 2

• Escrito parcialmente en Java y en código nativo
• Comunica la API del cliente con la base de datos
• Requiere instalación previa de software específico de
la plataforma junto con una librería Java asociada…

Laboratorio de Programación de Sistemas – Acceso a bases de datos

8

 Controlador Tipo 3

• Librería cliente de Java puro
• Usa protocolo independiente de la BD para enviar

peticiones al servidor (y luego éste traduce)

 Controlador Tipo 4

• Librería de Java puro
• Traduce peticiones JDBC a un protocolo de base

de datos específico

 Las distribuidores de bases de datos más

habituales suministran controladores tipo 3 ó
4 con sus productos
• Otras compañías también los desarrollan
• Estudiaremos cómo utilizar los de tipo 1 y 3

Laboratorio de Programación de Sistemas – Acceso a bases de datos

9

 Hay varias alternativas, cada una con sus requisitos
 Oracle

 MySQL

• Añadir librería con el controlador al proyecto
 ojdbc14_g.jar (Oracle Instant Client)
• Añadir librería con el controlador al proyecto
 mysql-connector-java-xx.jar (MySQL Connector/J)
• Configurar el controlador ODBC para poder acceder a la

 Access

base de datos (nombreControlador)
1.

Panel de Control  Herramientas administrativas  Orígenes de
datos (ODBC)  ODBC Data Source Administrator

2. Añadir [Microsoft Access Driver (*.mdb)]
3.

Seleccionar base de datos

Laboratorio de Programación de Sistemas – Acceso a bases de datos

10

En el programa

• Registrar el controlador cargando su clase
 System.setProperty(“jdbc.drivers”, driver);

 Se pueden registrar varios drivers separados por “:”

 Class.forName(String driver)

 Registro manual

• Ejemplos
 sun.jdbc.odbc.JdbcOdbcDriver
 oracle.jdbc.driver.OracleDriver

Laboratorio de Programación de Sistemas – Acceso a bases de datos

11

Para conectar con la base de datos hay que
especificar la fuente de datos mediante una
sintaxis similar a una URL
• jdbc:nombreSubprotocolo:otrosElementos
 nombreSubprotocolo selecciona el controlador concreto
 otrosElementos depende del subprotocolo
• Ejemplos
 jdbc:oracle:thin:@ipServidor:puerto:nombreBD
 jdbc:odbc:nombreControlador

Laboratorio de Programación de Sistemas – Acceso a bases de datos

12

ODBC

Oracle

• Connection conn =

DriverManager.getConnection(String url)

• Connection conn = DriverManager.getConnection

(String url, String user, String password)

conn.close()
• Cierra la conexión
• Es necesario cerrar las conexiones una vez que se

han terminado de utilizar para liberar recursos
(tanto en la aplicación como en el servidor)

Laboratorio de Programación de Sistemas – Acceso a bases de datos

13

 Usa archivos de configuración (tipo Properties)

• Fichero database.properties
 jdbc.drivers, jdbc.url, jdbc.username,
jdbc.password
• Ejemplo Oracle
 jdbc.drivers=oracle.jdbc.driver.OracleDriver
 jdbc.url=jdbc:oracle:thin:@localhost:1521:test
 jdbc.username=test
 jdbc.password=test
• Ejemplo Access
 jdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver
 jdbc.url=jdbc:odbc:TEST
 jdbc.username=
 jdbc.password=

Laboratorio de Programación de Sistemas – Acceso a bases de datos

14

 Primero, hay que crear un objeto Statement

 Después podemos hacer consultas

(sentencia SQL)
• Statement stmt = conn.createStatement ();
• ResultSet executeQuery(String sql)
 Realiza“select”
 Devuelve los registros en un ResultSet
• int executeUpdate(String sql)
 Realiza “insert, update, delete, create, drop…”
 Devuelve num de registros afectados de o a 1
• boolean execute(String sql)
• El modo “auto-commit” funciona por defecto, es decir, cada
sentencia se ejecuta dentro de una única transacción

Laboratorio de Programación de Sistemas – Acceso a bases de datos

15

java.sql.ResultSet
• Tabla de resultados por filas
• cursor entre filas, inicialmente antes de la primera
•boolean next()
 Pasa el cursor a la siguiente fila
 false, si se llega al final de la tabla
 true, caso contrario
• Tipo getTipo(int numColumna)
• Tipo getTipo(String nombreColumna)

Laboratorio de Programación de Sistemas – Acceso a bases de datos

16

/** * Tabla "Prueba" con columna "cadena" de tipo VARCHAR.
* Seleccionar las columnas de la tabla prueba
*/ResultSet rset = stmt.executeQuery ("SELECT * FROM
Prueba");
/*** Iterar a lo largo de la tabla obtenida,
* imprimiendo las tuplas
*/while (rset.next ()){
System.out.println (rset.getString (1));
//System.out.println (rset.getString ("cadena"));
}// Liberación de recursos, tanto ResultSet como Connection
rset.close();
stmt.close();

Laboratorio de Programación de Sistemas – Acceso a bases de datos

17

 Información sobre objetos java.sql.ResultSet

• Interfaz java.sql.ResultSetMetaData
 getColumCount() numColumnas  1..n
 getColumnName(i), getColumTypeName(i)
 Información sobre tablas de usuario
DatabaseMetaData dbmd = conn.getMetaData();
// MySQL, Access y HSQLDB
ResultSet rs = dbmd.getTables( null, null,
null, new
String[]{"TABLE"});
// Oracle
ResultSet rs = dbmd.getTables( null,
"NombreUsuario",
null, new
String[]{"TABLE"});

Laboratorio de Programación de Sistemas – Acceso a bases de datos

18

 En lugar de construir una sentencia cada vez que el
usuario lanza una consulta, se puede preparar una
vez y usarla muchas veces
• Se gana en rendimiento ya que el servidor puede “cachear”

el plan de ejecución de la consulta

• Se gana en seguridad ya que los drivers habitualmente se

encargan de procesar los parámetros de la consulta
preparada para evitar ataques del tipo “SQL Injection”
String consulta = "SELECT precio FROM libros
PreparedStatement stmtCP =
stmtCP.setString(1, "Pepe");
ResultSet rs = stmtCP.executeQuery();

WHERE autor = ?";
conn.prepareStatement(consulta);

Laboratorio de Programación de Sistemas – Acceso a bases de datos

19

 Para moverse hacia adelante y hacia atrás a

través de los datos, e incluso, saltar a una
posición concreta del conjunto de resultados
• Statement stat =
conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
• ResultSet rs = stat.executeQuery(query);
 rs.previous()  fila anterior
 rs.relative(n)  incremento relativo
 rs.absolute(n)  posición n
 int n = rs.getRow()  fila actual

ResultSet.CONCUR_READ_ONLY)

Laboratorio de Programación de Sistemas – Acceso a bases de datos

20

 Se pueden actualizar los datos obtenidos con

executeQuery
• Statement stat =

conn.createStatement(

ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE)
• ResultSet rs = stat.executeQuery(query);
 double precio = rs.getDouble("precio");
rs.updateDouble("precio", precio + incremento);
 rs.updateRow();  actualiza la base de datos
 rs.d
  • Links de descarga
http://lwp-l.com/pdf18326

Comentarios de: LPS: Acceso a Bases de Datos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad