Sei sulla pagina 1di 96

Unidad IV

Almacenamiento de
Datos

CONTENIDO
1. Archivos, flujos y serializacin
1.1 Archivos de texto
1.2 Clases de la API de Java de Archivo
1.3 Flujos de archivos
1.4 Flujos de objetos
1.4.1 Serializacin (almacenar)

2. Accesando bases de datos relacionales


2.1 Conceptos: Dato, Tabla, Campos y registros
2.2 Definicin de base de datos
2.3 Gestor de base de datos
2.4 Actores de un sistema de bases de datos
2.5 SQL (Structured Query Language)
2.6 ODBC
2.7 JDBC

1. Archivos, flujos y serializacin


1.1 Archivos de texto (Java 1.1).
FileReader : til para leer archivos de texto
Constructor: FileReader(String nombreArchivo)

FileWriter : til para escribir archivos de texto


Constructores
FileWriter(String nombreArchivo)  reescribe
FileWriter(String nombreArchivo, boolean agregarFinal)  aade

1.1 Archivos de texto


PrintWriter
 Implementa un flujo de salida de caracteres
 Mtodos de utilidad
print(), println(), close()
Ejemplo con FileWriter, FileReader y PrintWriter:
Escribir en un archivo de texto el cdigo y el nombre
de una persona (en lneas separadas)
Leer los datos del mismo archivo creado, y presentar
en pantalla los datos.

import java.io.*;
public class ArchivoTexto {
public static void main(String args[]) {
try {
// escritura de datos
PrintWriter salida = new PrintWriter( new BufferedWriter(new
FileWriter("prueba.txt")));
salida.println(12345");
salida.println(Juan Perez");
salida.close();
// lectura de datos
BufferedReader entrada =new BufferedReader(new
FileReader("prueba.txt"));
String s, s2 = new String();
while((s = entrada.readLine())!= null)
s2 = s2 + s + "\n";
System.out.println(Cadenas leidas:" + "\n" + s2);
entrada.close();
} catch (java.io.IOException e) { } } }

Clases BufferedReader y BufferedWriter

Si se usa slo FileReader o FileWriter, cada vez que se hace una


lectura o escritura, se har fsicamente en el disco duro.

Si escribimos o leemos pocos caracteres cada vez, el proceso se


hace costoso y lento, con muchos accesos a disco duro.

Los BufferedReader y BufferedWriter agregan un buffer


intermedio. Cuando se lee o escribe, esta clase controlar los
accesos a disco.

Si se escribe algo en el buffer, se guardar los datos hasta que


tenga bastantes datos como para hacer la escritura eficiente.

Si se lee algo de el buffer, la clase leer muchos datos de golpe,


aunque slo nos d los que hayamos pedido.

En las siguientes lecturas nos dar lo que tiene almacenado, hasta


que necesite leer otra vez.

Esta forma de trabajar hace los accesos a disco ms eficientes y el


programa correr ms rpido. La diferencia se notar ms cuanto
mayor sea el archivo que queramos leer o escribir.

1.2 Clases de la API de Java de


Archivo
Java provee otras 2 clases para el manejo de
archivos:
 File y
 RandomAccesFile (mayor control sobre los
archivos)

Clase File (java.io.File)


La clase File permite obtener la informacin de las
propiedades de un archivo.

No es posible escribir ni leer el contenido de un


archivo, pero es til para determinar el estado del
mismo (por ejemplo, si es un archivo o directorio).

Creacin del objeto File:


File obj = new File(ruta_del_archivo);
Si el archivo no existe, an as el objeto se
construye.

Clase File (java.io.File)


Constructores
File(String ruta)
File(String ruta, String nombre)
File(File directorio, String nombre)
Mtodos
boolean canRead()  se puede leer desde el archivo?
boolean canWrite()  se puede escribir en el archivo?

Clase File (java.io.File)


Mtodos
void delete()  borra dicho archivo
String getPath()  devuelve la ruta del archivo
boolean mkdir()  crea un directorio con la ruta
del objeto que lo recibe
boolean isDirectory()  comprueba si dicho
archivo es un directorio

Ejemplo: Crea una copia del archivo prueba.txt


import java.io.*;
public class CopiaArchivos {
public static void main(String[] args) throws IOException {
File archivoEntrada = new File("prueba.txt");
File archivoSalida = new File("copia.txt");
FileReader entrada = new FileReader(archivoEntrada);
FileWriter salida = new FileWriter(archivoSalida);
int dato;
while ((dato = entrada.read()) != -1)
salida.write(dato);
entrada.close();
salida.close();
}
}

Clase RandomAccessFile
Los archivos de acceso aleatorio se caracterizan porque
es posible mover el apuntador de archivo a cualquier
posicin dentro del mismo y efectuar operaciones de
escritura y lectura a la vez.
La forma general de construccin es:
RandomAccessFile archivo = new
RandomAccessFile(String nombre, String modo);
RandomAccessFile archivo = new
RandomAccessFile(File obj, String modo);
**modo: read/write

1.3 Flujos de archivos


Otra forma de manipulacin de archivos es tratndolos
como flujos continuos de bytes.
Cada archivo (objeto) entonces sera una cinta con la
secuencia de bytes para un archivo (fsico) dado.
A diferencia del acceso aleatorio, en stos se presenta
un acceso secuencial.
Al inicio, el puntero de archivo se coloca en el primer
byte y tendr que ir consumiendo bytes para colocarse
en los siguientes bytes hasta llegar al final.

Flujos de archivos

Estando al final del archivo, si se desea leer desde el principio el


archivo se tendr que rebobinar la cinta y volverlo a leer.

La clase InputStream es el flujo de entrada, mientras que


OutputStream lo es para salida.

Java ofrece subclases de estas clases base que especializan la


interpretacin de los bloques de bytes.

Por ejemplo, FileInputStream asocia un archivo como un flujo de


entrada, mientras que FileOutputStream trata a un archivo de
escritura como un flujo de salida.

Los mtodos clsicos son read() y write(), respectivamente.

1.4 Flujos de objetos


Es posible escribir y leer objetos de un flujo de cualquier
clase.
Las clases ObjectInputStream y ObjectOutputStream
ofrecen la posibilidad de escribir tanto datos primitivos y
objetos.
Lo interesante de estas clases es que permiten
guardar permanentemente el estado de un objeto y
posteriormente recuperarlo.
Por ejemplo, una ventana pudiera ser guardada en
archivo y luego, restaurarla.

Flujos de objetos
Serializacin es el proceso de transferir los bytes
correspondientes a un objeto a travs de un flujo.
Este proceso garantiza que el objeto se transmite
completamente (de all su nombre).
Un objeto Java serializable es uno cuya clase
implementa la interface Serializable.
Serializable no posee mtodos, solo indica a la
mquina virtual que ese objeto puede transmitirse
por un flujo.

Serializacin

Serializar es almacenar objetos de forma permanente (por ejemplo


en un archivo c:\miobjeto.obj, o en un flujo de comunicacin)
 No es necesario realizar conversiones
 til para portabilidad y para compartir objetos entre
aplicaciones

Flujos
Clase ObjectOuputStream
 Mtodo - writeObject()
 Ejemplo: flujoSalida.writeObjetct (objetoClase);
Clase ObjectInputStream
 Mtodo - readObject()
 Ejemplo: objetoClase = (Clase) flujoEntrada.readObject();

Serializacin
Cualquier clase que desee poder serializar sus objetos
debe implementar el interfaz Serializable.

En esta implementacin el objeto define como debe


almacenarse o recuperarse de un archivo.

Si se trata de serializar un objeto que no lo implementa se


obtiene la excepcin NotSerializableException.
No se serializan los atributos static o transient (no
serializable)

Serializacin
Las clases que necesiten algn tratamiento especial en
la Serializacion deben implementar estos dos mtodos:
private void writeObject (java.io.ObjectOutputStream
salida) throws IOException
private void readObject (java.io.ObjectInputStream
entrada) throws IOException, classNotFoundException;

Ejemplo: Guarda un objeto (Punto) en el archivo temp


import java.io.*;
class Punto implements Serializable {
private int x;
private int y;
public Punto(int x, int y)
{
this.x = x;
this.y = y;
}
public String toString()
{
return "Punto[" + x + "," + y + "]";
}
}

Ejemplo: Guarda un objeto (Punto)


public class AplicacionSerializacion
{
public static void main(String args[]) throws
IOException, ClassNotFoundException
{
Punto punto = new Punto(1, 5);
ObjectOutputStream archivoObjetosSal = new
ObjectOutputStream(new
FileOutputStream("temp"));

Ejemplo: Guarda un objeto (Punto)


//Guardando objeto
archivoObjetosSal.writeObject(punto);
archivoObjetosSal.close();
//Recuperando objeto
ObjectInputStream archivoObjetosEnt = new
ObjectInputStream(new FileInputStream("temp"));
Punto punt = (Punto) archivoObjetosEnt.readObject();
archivoObjetosEnt.close();
System.out.println( punt );
}
}

2. Accesando bases de datos


relacionales
2.1 Conceptos: Dato
Podemos decir que dato es una informacin que indica el
valor de una caracterstica de un objeto real, sea
concreto o abstracto, o imaginario.
La unidad mnima de informacin es el dato.

Dato
Los datos pueden ser de diferentes tipos:
Texto: secuencias de caracteres.
Numrico: cantidades (con o sin parte decimal).
Autonumrico: numrico sin parte decimal
automtico.
Fecha/Hora: para momentos histricos.
Moneda: cantidades monetarias.
Si/No: valores lgicos.
Y otros tipos.

TABLA
Es una estructura de datos que contiene informacin
comn, organizados en filas y columnas.
El contenido de la tabla debe describir o definir
completamente la entidad para la que fue diseada la
tabla.
Representa a un tipo de objetos de la vida real, como
pueden ser Empleados, Clientes, etc.
Tabla: Persona

Campos y Registro
Campo: es un solo dato, en una tabla los campos
representan las columnas. Ejemplo: nombre de cada
persona  nombre
Registro, es todo conjunto de campos relacionados con
un solo objeto de la tabla, en sta un registro representa
una fila. Ejemplo: la persona con el cdigo per=2 
Antonio Garca del departamento nmero 2.
Un registro contiene los datos de la misma persona.
Un campo contiene datos del mismo tipo.

Tabla, campo y registro


campo

nombre

carnet

carrera asig. Apro

registro

2.2 Definicin de Base de Datos

una base de datos es un conjunto de datos relacionados entre


s

una base de datos consiste en una coleccin de datos,


organizados de forma integrada en archivos, junto con un
conjunto de programas dedicados a su gestin.

Tabla: socio

Tabla: libro

Tabla:
prestamo

2.3 Gestores de Bases de Datos


Un sistema de gestin de bases de datos
(SGBD, o en ingls database management
system DBMS) es:
Un conjunto de programas que permite a
los usuarios crear y mantener una base
de datos.

2.4 Actores en un sistema de BD


1. Administrador de la Base de Datos
2. Diseadores de la Base de Datos
3. Usuarios finales
4. Analistas de sistemas y programadores de
aplicaciones (ingenieros de software)
5. Diseadores e implementadores del SGBD
6. Desarrolladores de herramientas
7. Operadores y personal de mantenimiento

2.5 SQL (Structured Query Language)


Contenido
Generalidades del SQL
Sublenguajes del SQL
Llaves(Primaria y fornea)
Lenguaje SQL

SQL (Structured Query Language)


Es el lenguaje estndar internacional que se utiliza casi
universalmente con las bases de datos relacionales.
Permite realizar consultas (es decir, para solicitar
informacin que satisfaga ciertos criterios y para
manipular datos).
Con la aparicin del modelo relacional de base de
datos a comienzos de los 70s se dio forma a un
lenguaje que permiti la definicin y manipulacin de la
estructura de datos relacional: la relacin.

SQL (Structured Query Language)


SQL soporta los conceptos ms fundamentales
del modelo relacional como son las relaciones,
dominios, tuplas (registros) y atributos
(campos).
Los principales SGBD Relacionales como
Oracle, Sybase, DB/2, Informix, Ingres, SQL
Server, utilizan este lenguaje que se ha
transformado en el estndar para la definicin y
manipulacin de datos en bases de datos
relacionales.

SQL (Structured Query Language)


Como su nombre indica, el SQL nos permite
realizar consultas a la base de datos, y adems
definicin, control y gestin de la base de datos.
Las sentencias SQL se clasifican segn su
finalidad dando origen a tres lenguajes o mejor
dicho sublenguajes:
DDL (Data Definition Language)
DCL (Data Control Language),
DML (Data Manipulation Language)

Sublenguajes del SQL


DDL (Data Definition Language)
Lenguaje de definicin de datos, incluye
instrucciones para definir, modificar o borrar las
tablas en las que se almacenan los datos y de las
relaciones entre estas. (Es el que ms varia de un
sistema a otro).
Ejemplos: Create table, alter table, etc.

Sublenguajes del SQL


DCL (Data Control Language)
Lenguaje de control de datos, contiene
elementos tiles para trabajar en un entorno
multiusuario, en el que es importante la proteccin
de los datos, la seguridad de las tablas y el
establecimiento de restricciones en el acceso, as
como elementos para coordinar la comparticin de
datos por parte de usuarios concurrentes,
asegurando que no interfieren unos con otros.
Ejemplo: grant select

Sublenguajes del SQL


DML (Data Manipulation Language)
Lenguaje de manipulacin de datos, permite
recuperar los datos almacenados en la base de
datos y tambin incluye instrucciones para permitir
al usuario actualizar la base de datos agregando
nuevos datos, suprimiendo datos antiguos o
modificando datos previamente almacenados.
Ejemplos: select, insert, delete y update.

Lenguaje SQL
Contenido
Llaves(Primaria y fornea)
SQL
Componentes
Comandos
Operadores
Instrucciones
SELECT
INSERT
DELETE
UPDATE
Funciones de agregado

Llave primaria y Llave fornea


La llave primaria (PK, primary key): es un
conjunto de uno o mas campos (columnas),
que juntos permiten identificar en forma nica
una fila.
La llave fornea (FK, foreign key): es el
conjunto de campos de la PK de una tabla A
existentes en una tabla B, para mantener la
interrelacin de las dos tablas.

Ejemplo de llaves primaria y fornea


Tabla: Departamento (llave primaria: dep)
Departamento

Tabla: Persona (llave primaria: per, llave fornea: dep)


Persona

Componentes del SQL


El lenguaje SQL est compuesto por:

Comandos
Clusulas
Operadores
Funciones de agregado

Estos elementos se combinan en las


instrucciones para crear, actualizar y
manipular las bases de datos.

Comandos del SQL


INSERT: Utilizado para cargar lotes de datos
en la base de datos en una nica operacin.
UPDATE: Utilizado para modificar los valores
de los campos y registros especificados.
DELETE:
Utilizado para eliminar registros de
una tabla de una base de datos.
SELECT:
Utilizado para consultar registros de
la base de datos que satisfagan un criterio
determinado.

Operadores de SQL
Lgicos:
AND

Es el y lgico. Evala dos condiciones


y devuelve un valor de verdad solo si
ambas son ciertas.

OR

Es el o lgico. Evala dos condiciones


y devuelve un valor de verdad si alguna
de las dos es cierta.

NOT

Negacin Lgica. Devuelve el valor


contrario de la expresin.

Operadores de Comparacin
Operador

Uso

<

Menor que

>

Mayor que

<>

Distinto de

<=

Menor igual que

>=

Mayor o igual que

Igual que

BETWEEN

Usado para especificar un intervalo de valores

LIKE

Usado en la comparacin de un modelo

IN

Usado para especificar registros de una lista de


datos

Comando SELECT
Una consulta SQL selecciona filas y
columnas de una o ms tablas en una base de
datos.
Forma bsica:
SELECT * FROM nombreDeTabla
El smbolo * es un comodn indica que deben
recuperarse todas las columnas de la tabla
nombreDeTabla.

Ejemplo de Comando SELECT

Para recuperar solo ciertas columnas de una


tabla, reemplace el asterisco (*) con una lista
separada por comas de los nombres de las
columnas.

SELECT Key, Nombre FROM Empleados


Esta consulta devuelve:
Key

Nombre

1.
2.
3.
4.
5.

Perez
Garca
Cabrera
Lpez
Gmez

La clusula WHERE
En la mayora de los casos es necesario localizar, en
una base de datos, filas que cumplan con ciertos
criterios de seleccin (formalmente llamados
predicados).
SQL utiliza la clusula WHERE en una consulta
SELECT para especificar los criterios de seleccin para
la consulta.
La forma bsica es:
SELECT nombreDeColumna1, nombreDeColumna2, ...
FROM nombreDeTabla
WHERE criterios

Ejemplos de clusula WHERE


Ejemplo:
SELECT titulo, numeroEdicion, copyright
FROM titulos
WHERE copyright > 200
Los criterios de la clusula WHERE pueden contener
los operadores <, >, <=, >=, =, <> y LIKE.
El operador LIKE se utiliza para relacionar patrones con
los caracteres comodines porcentaje (%) y guin bajo
(_).
Ejemplo:
WHERE

Carnet like __03___

Ejemplos de clusula WHERE


Un patrn que contenga un carcter de porcentaje
(%) busca cadenas que tengan cero o ms
caracteres en la posicin del carcter de porcentaje
en el patrn.
Ejemplo:
SELECT idAutor, nombrePila, apellidoPaterno
FROM autores
WHERE apellidoPaterno LIKE D%

Ejemplos de clusula WHERE


Un guion bajo (_) en la cadena del patrn indica
un carcter comodn individual en esa posicin.
Ejemplo:
SELECT idAutor, nombrePila, apellidoPaterno
FROM autores
WHERE apellidoPaterno LIKE _i%
Resultado: Apellido paterno con cualquier letra al
inicio, pero el 2do carcter debe ser la letra i.
NOTA: Algunas bases de datos utilizan el carcter
? en lugar del carcter _ en un patrn.

Clusula ORDER BY
El resultado de una consulta puede ordenarse a partir
de una columna, en forma ascendente o descendente,
mediante el uso de la clusula ORDER BY (opcional).
La forma bsica para ordenar ascendentemente es:
SELECT nombreDeColumna1, nombreDeColumna2, ...
FROM nombreDeTabla
ORDER BY columna ASC

Clusula ORDER BY
La forma bsica para ordenar en forma descendente es:
SELECT nombreDeColumna1, nombreDeColumna2, ...
FROM nombreDeTabla
ORDER BY columna DESC
Ejemplo:
SELECT idAutor, nombrePila, apellidoPaterno
FROM autores
ORDER BY apellidoPaterno ASC

Como fusionar datos de varias


tablas: WHERE
Para unir los datos de varias tablas es necesario
establecer la(s) condiciones de enlace entre las
tablas, luego se incorporan los
criterios(opcionales) de filtrado de la consulta.
SELECT nombreDeColumna1, nombreDeColumna2,...
FROM nombreDeTabla(s)
WHERE condiciones de enlace + AND +
criterios de filtrado de filas

Ejemplo de fusin de datos con WHERE

SELECT Empresa.IdEmpresa, Empresa.NombreEmpresa,


Planilla.NumeroPlanilla, Planilla.FechaPago
FROM Empresa, Planilla
WHERE Empresa.IdEmpresa=Planilla.IdEmpresa
AND Planilla.TotalSalarios>50000

Resultado: El cdigo y nombre de la empresa con el nmero de


planilla y su fecha de pago; de aquellas planillas cuyo total es
mayor a $50,000.00

Ejercicios
Con los datos del ejemplo anterior:
Escriba la instruccin SQL que muestre el
nombre de las empresas que pagan
mensualmente.
Escriba la instruccin SQL que muestre el
nmero de la planilla, la fecha de pago y el total,
de las planillas de la empresa ACME, y que las
ordene por fecha (de la ms reciente a las ms
antigua).

Comando INSERT

Sintaxis de Sql :
INSERT INTO NombreTabla VALUES (Valor1, Valor2, Valor3)

Nota: Si utiliza el mismo orden en que los campos se listan en


la relacin.

Tambin puede usar:


INSERT INTO NombreTabla (campo1, campo2, campo3)
VALUES (valor1, valor2, valor3)

Nota: Si no se recuerda del orden de los campos.


Ejemplo:
INSERT INTO s_depto ( id_depto, nombre)
VALUES (10, INFORMATICA)

Comando DELETE
Sintaxis de delete:
DELETE FROM nombre_tabla
WHERE condicin

Ejemplo:
DELETE FROM s_depto
WHERE id=15

Comando UPDATE

Cuando se desea cambiar un valor dentro de una fila, sin


cambiar todos los valores de la misma, se utiliza update.

Sintaxis:
UPDATE NombreTabla
SET capto1=valor1

Ejemplo: Si se quiere realizar el pago de intereses


anuales y todos los saldos se incrementasen en un 5%:
UPDATE cuenta
SET saldo=saldo * 1.05

Nota: Esta actualizacin se aplica una vez a cada tupla o


fila de la tabla cuenta.

UPDATE
Otra Sintaxis:
UPDATE nombre_tabla
SET campo1 = valor1
WHERE condicin
Ejemplo:
UPDATE s_depto
SET nombre = G. INFORMA
WHERE id_depto = 20
Nota: Esta actualizacin se aplica a la fila con el id
nmero 20.

Funciones de agregado del SQL


Se usan dentro de un comando SELECT en grupos de registros
para devolver un nico valor que se aplica a un grupo de
registros.
Funcin

Descripcin

AVG

Utilizada para calcular el promedio de los valores de un


campo determinado

COUNT

Utilizada para devolver el nmero de registros de la


seleccin

SUM

Utilizada para devolver la suma de todos los valores de un


campo determinado

MAX

Utilizada para devolver el valor ms alto de un campo


especificado.

MIN

Utilizada para devolver el valor ms bajo de un campo


especificado.

Funciones de agregado del SQL


Ejemplo:
SELECT AVG (notafinal)
FROM nota
WHERE carnet=AA01001

Aunque todos los SGBD (Sistemas Gestores de Bases de


datos) soportan SQL y la programacin es similar, cada base
de datos tiene su propia forma de recibir las consultas SQL, y
su propio modo de devolver los resultados.
Aqu es donde aparece el siguiente nivel de estandarizacin
ODBC (Open DataBase Connectivity).

Ejercicios
En la tabla Alumno con los siguientes campos y datos:
carne
EL12001

nombres
Samuel

apellidos

fechaNac

edad

carrera

Estrada Arias

10-01-1994

18

Ingeniera Elctrica

AH11011 Juan

Arias Herrera

23-03-1991

21

Ingeniera Qumica

PL09123

Prez Lpez

15-10-1990

22

Ingeniera Qumica

NP10010 Josefa

Navas Prez

03-11-1995

17

Ingeniera Elctrica

LL10005

Lara Lpez

11-07-1990

22

Ingeniera Qumica

EF09025 Elena

Estrada Flores

21-05-1991

21

Ingeniera Elctrica

LE12225

Len Estrada

14-01-1995

17

Ingeniera Elctrica

HA11215 Luis

Heredia Alas

21-12-1994

18

Ingeniera Qumica

LP09013

Lpez Prez

07-08-1993

19

Ingeniera Elctrica

Mara
Jos
Miguel
Ana

Ejercicios
Hacer las siguientes consultas.
1. Mostrar carne, apellidos, edad de los alumnos que tengan
ms de 21 aos.
2. Contar el numero de alumnos que tienen nombre que
comienza con J.
3. Mostrar carne, nombre y apellidos de los alumnos ordenados
por apellidos.
4. Insertar 2 alumnos mas, y luego encontrar el promedio de la
edad.
5. Borrar al alumno que tiene el carne EL12001
6. Mostrar los nombres y apellidos de los alumnos cuya edad
sea entre 18 y 22 aos.

Respuestas
1. SELECT carne, apellidos, edad
FROM Alumno
WHERE edad >21;
2. SELECT count( carne )
FROM Alumno
WHERE nombres LIKE 'J%';
3. SELECT carne, nombres, apellidos
FROM Alumno
ORDER BY apellidos

Respuestas
4. INSERT INTO Alumno (carne, nombres,
apellidos, fechaNac, edad, carrera) VALUES (AL06002,
Carlos Efrain, Avalos Lpez, 15-05-1988, 24, Ingeniera
Industrial);
INSERT INTO Alumno VALUES (ZM10001, Guadalupe,
Zamora Martinez, 17-08-1987, 25, Arquitectura);
SELECT avg( edad )
FROM Alumno;
5. DELETE FROM Alumno WHERE carne = EL12001;
6. SELECT nombres, apellidos FROM Alumno WHERE edad
BETWEEN 18 AND 22;
o tambin
SELECT nombres, apellidos FROM Alumno
WHERE edad IN ( 18, 19, 20, 21, 22 )

2.6 ODBC
ODBC (Open DataBase Connectivity)
Conectividad Abierta a Bases de Datos es
una interfaz de programacin que habilita
a las aplicaciones para acceder datos en
Sistemas Gestores de Bases de Datos que
usan el Lenguaje Estructurado de
Consulta (SQL) como estndar de acceso
a datos.

ODBC
Funcin del ODBC
Transforman la sintaxis SQL de ODBC en la
sintaxis aceptada por la fuente de datos.
De esta forma se puede acceder a
diferentes fuentes de datos cargando un
driver correspondiente a la fuente de datos.
Gracias a ODBC, podemos conectarnos a
servidores de bases de datos reales como
DB/2, SQL Server, Oracle, Informix, etc.

2.7. Conectividad de Base de Datos


en Java con JDBC
Contenido
Introduccin
Conectividad JDBC
Modelo de dos capas
Modelo de tres capas
Tipo de drivers
Cdigo con JDBC y SQL

Introduccin
JDBC (Java DataBase Connectivity), es un API
de Java que permite al programador ejecutar
instrucciones en lenguaje estndar de acceso a
Bases de Datos SQL (Structured Query
Language), un lenguaje para crear, examinar,
manipular y gestionar Bases de datos
relacionales.
Para que una aplicacin pueda hacer
operaciones en una Base de datos, ha de tener
una conexin con ella, que se establece a travs
de un driver, que convierte el lenguaje de alto
nivel a sentencias de Bases de datos.

Introduccin
Es decir, las tres acciones principales que realizar
JDBC son las de:
1. establecer la conexin a una base de datos, ya sea
remota o no;
2. enviar sentencias SQL a esta base de datos y,
3. en tercer lugar, procesar los resultados obtenidos de
la base de datos.
Los programas de Java se comunican con las bases de
datos y manipulan sus datos utilizando la API JDBC.
Un controlador JDBC implementa la interfaz para una
base de datos especfica.

Conectividad JDBC
JDBC especifica una serie de clases y mtodos para
permitir a cualquier programa Java una forma
homognea de acceso a sistemas de bases de
datos.
Este acceso se realiza a travs de drivers, que son
los que implementan la funcionalidad especificada
en JDBC. Esto es semejante a lo que ofrece ODBC.
La necesidad de JDBC, a pesar de la existencia de
ODBC, viene dada porque ODBC es una interfaz
escrita en lenguaje C, que al no ser un lenguaje
portable, hara que las aplicaciones Java tambin
perdiesen la portabilidad.

Conectividad JDBC
Adems, ODBC tiene el inconveniente de que se ha de
instalar manualmente en cada mquina; al contrario de
los drivers JDBC, que al estar escritos en Java son
automticamente instalables, portables y seguros.
La conectividad de bases de datos se basa en
sentencias SQL, que a travs de JDBC, permiten
realizar la conexin a la base de datos, realizar
consultas y recibir los resultados.
JDBC permite ciertas facilidades, como realizar la
actualizacin de mltiples registros con un solo
comando o acceder a mltiples servidores de bases
de datos dentro de una transaccin simple.

Conectividad JDBC

Adems permite reutilizar las conexiones a la base de


datos (proceso que se conoce como connection
pooling), de modo que no se necesita realizar una
nueva conexin a la base de datos para cada comando
JDBC.
JDBC tambin permite escribir aplicaciones que accedan
a datos a travs de sistemas de bases de datos
incompatibles corriendo en plataformas distintas,
basndose en que Java se puede ejecutar sobre
plataformas hardware y sistemas operativos diferentes.
El API JDBC soporta dos modelos diferentes de acceso a
bases de datos, los modelos de dos capas y de tres
capas.

Modelo de dos capas


Este modelo se basa en que la conexin entre la
aplicacin Java o el Applet que se ejecuta en el
navegador, se conectan directamente a la base de
datos.

Modelo de dos capas


Esto significa que el driver JDBC especfico para
conectarse con la base de datos, debe residir en el
sistema local.
La base de datos puede estar en cualquier otra
mquina y se accede a ella mediante la red.
Esta es la configuracin tpica Cliente/Servidor: el
programa cliente enva instrucciones SQL a la base de
datos, esta las procesa y enva los resultados de vuelta
a la aplicacin.

Modelo de tres capas

En este modelo, las instrucciones son enviadas a una capa


intermedia entre Cliente y Servidor, que es la que se
encarga de enviar las sentencias SQL a la base de datos y
recoger el resultado desde la base de datos, vase la figura.

En este caso el usuario no tiene contacto directo, ni siquiera


a travs de la red, con la maquina donde reside la base de
datos.

Este modelo tiene la ventaja que el nivel intermedio


mantiene en todo momento el control del tipo de operaciones
que se realizan contra la base de datos, y adems, est la
ventaja adicional de que los drivers JDBC no tienen que
residir en la maquina cliente, lo cual libera al usuario de la
instalacin de cualquier tipo de driver.

Modelo de tres capas

TIPO DE DRIVERS
Puente JDBC-ODBC

Utilizada inicialmente y consiste en aprovechar todo lo


existente, estableciendo un puente entre JDBC y ODBC.

Este driver convierte todas las llamadas JDBC a llamadas


ODBC y realiza la conversin correspondiente de los
resultados.

Ventaja :
Java dispone de acceso inmediato a todas las fuentes
posibles de bases de datos y no hay que hacer
ninguna configuracin adicional aparte de la ya
existente.

Puente JDBC-ODBC

Desventajas muy importantes:

La mayora de los drivers ODBC a su vez convierten sus


llamadas a llamadas a una librera nativa del fabricante DBMS,
con lo cual la lentitud del driver JDBC-ODBC puede ser
exasperante, al llevar dos capas adicionales que no aaden
funcionalidad alguna;
El puente JDBC-ODBC requiere una instalacin ODBC ya
existente y configurada.

Java/Binario

Este driver se salta la capa ODBC y habla directamente con la


librera nativa del fabricante del sistema DBMS.
Este driver es un driver 100% Java pero an as necesita la
existencia de un cdigo binario (la librera DBMS) en la mquina
del cliente, con las limitaciones y problemas que esto implica.

100% Java/Protocolo nativo

Es un driver realizado completamente en Java que se comunica


con el servidor DBMS utilizando el protocolo de red nativo del
servidor. De esta forma, el driver no necesita intermediarios para
hablar con el servidor y convierte todas las peticiones JDBC en
peticiones de red contra el servidor.
La ventaja de este tipo de driver es que es una solucin 100%
Java y, por lo tanto, independiente de la mquina en la que se va
a ejecutar el programa.

100% Java/Protocolo nativo


La nica desventaja de este tipo de drivers es que el
cliente est ligado a un servidor DBMS concreto, ya
que el protocolo de red que utiliza MS SQL Server
por ejemplo no tiene nada que ver con el utilizado
por DB2, PostgreSQL u Oracle.
La mayora de los fabricantes de bases de datos han
incorporado a sus propios drivers JDBC del segundo
o tercer tipo, con la ventaja de que no suponen un
coste adicional.

100% Java/Protocolo independiente

Esta es la opcin ms flexible, se trata de un driver 100%


Java/Protocolo independiente, que requiere la presencia de un
intermediario en el servidor.
En este caso, el driver JDBC hace las peticiones de datos al
intermediario en un protocolo de red independiente del servidor
DBMS. El intermediario a su vez, que est ubicado en el lado del
servidor, convierte las peticiones JDBC en peticiones nativas del
sistema DBMS.

100% Java/Protocolo independiente


La ventaja de este mtodo es inmediata: el
programa que se ejecuta en el cliente, y aparte
de las ventajas de los drivers 100% Java,
tambin presenta la independencia respecto al
sistema de bases de datos que se encuentra en
el servidor.
La nica desventaja de este tipo de drivers es
que la aplicacin intermediaria es una aplicacin
independiente que suele tener un costo
adicional por servidor fsico, que hay que aadir
al costo del servidor de bases de datos.

Cdigo con JDBC y SQL

Declaracin de un objeto del tipo conexin a la base de


datos.
Connection conexion;

Instrucciones para cargar el Driver JDBC para SqlServer,


utilizando el mtodo forName() de la clase Class.
try {
Class.forName("com.microsoft.sqlserver.
jdbcSQLServerDriver).newInstance();
} // try
catch(Exception e){
informacion.setText("No se pudo cargar el Driver
JDBC");
} // catch
Para MySQL el parmetro sera: "com.mysql.jdbc.Driver.

La coneccin al SGBD se realiza solicitndolo a la clase


DriverManager.
En la siguiente instruccin, se accede a la base de datos que esta
ubicada en el servidor definido como localhost, se define el usuario
sa con el que se conectar a la base de datos y se proporciona su
clave de acceso que es adminadmin.
String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=pubs;user=sa; password=adminadmin;";
conexion=DriverManager.getConnection(connectionUrl);
El String del parmetro vara de acuerdo al SGBD de la base de
datos, el puerto de MySql es 3306, el de Postgre es 5432.
Ejemplo de coneccin en PostgreSQL.
conexion =
DriverManager.getConnection("jdbc:postgresql://localhost:543
2/prn315", "prn315", "prn315");

La siguiente lnea es la que crea un objeto de tipo Statement,


a travs del cual se van a ejecutar todas las sentencias SQL,
utilizando la conexin anterior.
sentencia=conexion.createStatement();

Para ejecutar las sentencias, estn disponibles dos mtodos,


en funcin de que sea necesario o no que la ejecucin de la
sentencia SQL devuelva algn tipo de informacin:

execute ( String sentencia ), para ejecutar una peticin


SQL que no devuelva ningn tipo de datos ( lo mismo hace
executeUpdate() ).

executeQuery ( String sentencia ), para ejecutar una


consulta SQL que devuelve un objeto de tipo ResultSet.

Por ejemplo, la siguiente es una sentencia para borrar


cualquier tabla DATOSPERSONALES que existiese.

try {

sentencia.executeUpdate("DROP TABLE IF

EXISTS DATOSPERSONALES");
} // try interno
catch(SQLException e) {
informacion.setText("Error al Borrar la tabla");
System.out.println(e);
} // catch interno

La sentencia siguiente es la encargada de crear la tabla que


va a permitir insertar registros correspondientes a la
informacin de personal en la tabla.

En esta sentencia SQL se indica el nombre de cada campo


del registro, el tipo de informacin que almacenar y si se
permite que el campo este vaco o no.
sentencia.executeUpdate("CREATE TABLE
DATOSPERSONALES (+"NOMBRE CHAR(20),+
"APELLIDOS VARCHAR(25),+"FECHA_NAC DATE Not
Null,+"TELEFONO CHAR(10),+"SALARIO FLOAT )") ;

La siguiente sentencia permite crea una Llave Primaria


(Primary Key) a la tabla de DATOSPERSONALES.
// Crea la Llave Primaria de la Tabla
sentencia.executeUpdate("ALTER TABLE
DATOSPERSONALES " +"ADD CONSTRAINT
PK_DATOSPERSON "+"PRIMARY KEY USING BTREE
(Nombre, Apellidos)" ) ;

Una sentencias SQL para insertar filas en una tabla de la base de


datos.
String sql_add="INSERT INTO DATOSPERSONALES VALUES
(' " + nombre.getText().toUpperCase() + "', '" +
apellidos.getText().toUpperCase() +"', '"+ fech_nac.getText()+ "', '"
+ telefono.getText() + "', " + salario.getText()+ ") " ;
sentencia.executeUpdate(sql_add);
Sentencias para recuperar informacin almacenada en una tabla.
String sql_str = "SELECT * FROM DATOSPERSONALES" ;
resultado=sentencia.executeQuery(sql_str);
// Create and execute an SQL statement that returns some data.
String SQL = "SELECT * FROM AUTHORS";
sentencia = conexion.createStatement();
resultado = sentencia.executeQuery(SQL);

Ejemplo
Abrir en Netbeans una aplicacin de base de
datos.
Notar que el driver JDBC de PostgreSQL est en
la librera de la aplicacin.

Aplicacin en ejecucin
Despliegue de
datos de la base
de datos

Doble click sobre la


Fila, muestra datos en
el rea de mantenimiento

Se puede buscar por


Cdigo o nombre

Modificaciones aparecen
en el despliegue de las
filas en la Tabla.

La conexin a
la base de datos
es cerrada al
cerrar la aplicacin.

Potrebbero piacerti anche