Está en la página 1de 39

PROGRAMACION

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

WEB:
ACADEMICO:

ANO

A DISCENTRO ESPECIFICO DE EDUCACION


TANCIA DE LA COMUNIDAD VALENCIANA
(CEEDCV)
http: // www. ceedcv. es
2014/2015

PROFESOR:
EMAIL:

FRANCISCO ALDARIAS RAYA


paco. aldarias@ ceedcv. es

MODULO:
CICLO FORMATIVO:
DEPARTAMENTO:
CURSO:

PROGRAMACION
CFGS: DESARROLLO DE APLICACIONES WEB

INFORMATICA
o
1

CENTRO:

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

Licencia de Creative Commons.

PROGRAMACION
TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS
por Francisco Aldarias Raya
es licencia bajo
http://creativecommons.org/licenses/by-nc-sa/3.0/es/
License.
Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Espana
Creado a partir de la obra en http://www.ceedcv.es
Bajo las condiciones siguientes:

Reconocimiento - Debe reconocer los creditos


de la obra de la manera
especificada por el autor o el licenciador (pero no de una manera que
sugiera que tiene su apoyo o apoyan el uso que hace de su obra).
No comercial - No puede utilizar esta obra para fines comerciales.
Compartir bajo la misma licencia - Si altera o transforma esta obra, o
puede distribuir la obra generada bajo
genera una obra derivada, solo

una licencia identica


a esta.

1. 2011-2012
Version
2. 2013-2014
Version
3. 2014-2015
Version
Changeset: 34:3452f54ec3cb
30 de marzo de 2015
Ultima actualizacion
FRANCISCO ALDARIAS RAYA
paco.aldarias@ceedcv.es

Departamento de Informatica.
a Distancia de la Comunidad Valenciana. (CEED)
Centro Especfico de Educacion
http://www.ceedcv.es

En Valencia (Espana).
Documento realizado con software libre: linux debian, LATEX.

9.2

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

INDICE

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

Indice
1. BASES DE DATOS ORIENTADAS A OBJETOS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1. Definicion

1.2. BDOO Comerciales . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3. Caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SGBDR y SGBDOO . . . . . . . . . . . . . . . . . . .
1.4. Comparacion

DEL SGBDOO
2. INSTALACION

2.1. La BD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2. Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3. Netbeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4. Practica
1. Instalar db40 en Netbeans . . . . . . . . . . . . . . . . .

3. EL API

3.1. Caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2. Metodos
Basicos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4. OPERACIONES BASICAS

4.1. Ejemplo2. alumno.java . . . . . . . . . . . . . . . . . . . . . . . . . .

4.2. Esquema de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.3. Abrir y cerrar la bd . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.4. Borrar la bd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.5. Almacenar un objeto de la clase . . . . . . . . . . . . . . . . . . . .

10

4.6. Mostrar los objetos de la clase . . . . . . . . . . . . . . . . . . . . .

10

4.7. Modificar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

4.8. Borrar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

4.9. Ejemplo2. Main.java . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

4.10.Practica
3. Grabar el mismo objeto . . . . . . . . . . . . . . . . . . .

12

4.11.Ejercicio2b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

5. TIPOS DE CONSULTAS

14

5.1. QBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6. SODA

15
15

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1. Descripcion

15

6.2. Metodos
SODA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.3

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

INDICE

7. CONSULTAS CON SODA

15

7.1. Consulta 1. Todos . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

7.2. Consulta 2. Igual a un valor . . . . . . . . . . . . . . . . . . . . . . .

16

7.3. Consulta 3. Not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

7.4. Consulta 4. And

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

7.5. Consulta 5. Or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

7.6. Consulta 6. Ordenados . . . . . . . . . . . . . . . . . . . . . . . . .

19

7.7. Ejemplo3: Main.java . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

7.8. Ejercicio3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

8. OBJETOS ESTRUCTURADOS

22

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1. Definicion

22

8.2. Ejemplo4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

9. BORRADO DE OBJETOS ESTRUCTURADOS

26

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1. Definicion

26

9.2. Ejemplo5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

10. VECTOR DE OBJETOS

29

10.1.Ejemplo6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

10.2.Clase profesor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

10.3.Clase Main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

11. ORIENTACION

34

11.1.Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

11.2.Codigo
Fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

11.3.Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

11.4.Datos bibliograficos
. . . . . . . . . . . . . . . . . . . . . . . . . . .

34

11.5.Recursos en Internet . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

12. EJERCICIOS PROPUESTOS

35

12.1.Ejercicio1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

12.2.Ejercicio2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

12.3.Ejercicio3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

12.4.Ejercicio4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

12.5.Ejercicio5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

9.4

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

BASES DE DATOS ORIENTADAS A OBJETOS

1.

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

BASES DE DATOS ORIENTADAS A OBJETOS

1.1.

Definicion

Mediante las Bases de Datos Orientadas a Objetos (BDOO), permite la


persistencia de los objetos, es decir, podemos almacenar los objetos y las clases
para luego poder recuperarse.
El almacenamiento de los objeto hace referencia a guardar el valor de sus
atributos.
La ventaja de las BDOO respecto a las Bases de Datos Relacionales (BDR),
de forma mas
simple en la
es que las primeras permite almacenar la informacion
orientada a objetos.
programacion

1.2.

BDOO Comerciales
db4o. BDOO Open Source soporte para Java, .NET.
Objetivity. BDOO soporte para Java, C++, python es de pago.
Intersystems Cache. BDOO soporte para Java, C++, .NET es de pago.
EyeDB. BDOO soporte para Java, C++. Software Libre.

1.3.

Caractersticas

del cual cuando


1.- Los objetos tienen un identificador que los diferencia, a traves
un objeto se modifica se recupera de la BD y luego se almacena.
2.- La BD mantiene la herencia entre objetos.
3.- Rapidez en las consultas por no necesitar hacer join.
4.- Rapidez en el proceso de objetos ya que no hay que hacer funciones
especiales para recuperar objetos.
a traves
de objetos, en lugar de usar filas y columnas
5.- Acceso a la informacion
de una tabla.
6.- No existe SQL.
difciles de entender.
7.- La estructura de las BDOO son mas
faciles

8.- Hay consultas complejas que son mas


con BDR.

1.4.

SGBDR y SGBDOO
Comparacion

Fuente: Revista Informatica


Economica,
nr 44 (44)/2007.
Seguidamente se muestra una tabla que compara las diferencias entre un
de Base de datos relacional (SBBDR) y un Sistema de gestion

Sistema de Gestion
de bases de datos orientadas a objetos (SGBDOO).
FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.5

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

DEL SGBDOO
INSTALACION

Diferencias
Modelo Orientado a
Objetos

Modelo Relacional

Objeto

Entidad

Clases de objetos

Tipos de Entidades

Jerarqua de Clases

El esquema de base
de datos.

Instancia de Clase
Atributo

Relacion
Mensaje

Encapsulacion
Identificador de Objeto (OID)
Herencia

Entidad, Tupla o Registro


Atributo

Relacion
No hay
No hay

Diferencias
El objeto especifica el comportamiento.
Las clases de objetos incluyen
un comportamiento comun
de
los objetos de esa clase.
La jerarqua de clases incluye
herencia, mientras que el esquema incluye clases externas.
La instancia de clase puede ser
restrictivo.
mas
No hay diferencias.
No hay diferencias.

Clave Primaria
No hay

DEL SGBDOO
INSTALACION

2.
2.1.

La BD

Se utilizara db4o
Se puede obtener de las web:
http://www.db4o.com.
los ejemplo (mirar anexo), hay una carpeta
Nota: En el cvs donde estan
llamada libreras que contiene un fichero .jar. Instalar la librera con
nombre Db4o.
Seleccionaremos db40 for Java y esto permitira descargar el fichero:
db4o-x.x-java.zip
Para usar db4o se necesita el la librera que se encuentra en la carpeta
lib de fichero zip, llamado:
db4o-x-core-java5.jar

2.2.

Import

Deberemos importar en java las libreras:


import com . db4o .*;

9.6

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

DEL SGBDOO
INSTALACION

2.3.

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

Netbeans

Debemos anadir
el fichero db4o-x-core-java5.jar a la Biblioteca.
ir a Agregar
Ir al menu Herramientas - Bibliotecas. Nueva Biblioteca. Y despues
archivo jar, seleccionando el fichero db4o-x-core-java5.jar

Ver la figura 1 de la pagina


7.

Figura 1: Anadir
Bibliotecas

La librera la debera aparecer en la parte de Biblioteca de nuestra aplicacion.

Para el menu contextual de Biblioteca y seleccionamos anadir


fichero jar.

Ver la figura 2 de la pagina


7.

Figura 2: Biblioteca anadida

2.4.

Practica
1. Instalar db40 en Netbeans
Descargar la base de datos db4. Hay una carpeta llamada libreras que
contiene un fichero .jar. Instalar la librera con nombre Db4o.
FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.7

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

OPERACIONES BASICAS

Anadir
la Biblioteca db40. Ver figura 2 de la pagina
7.
Probar que funciona el Ejemplo2 de las fuentes prgcod11.

3.

EL API
del API viene en la carpeta /doc/api del fichero zip.
Las documentacion
En ella se describe el interface:
com.odb40.ObjectContainer

3.1.

Caractersticas
El contenedor repesenta una BD en modo monousuario o un cliente de
la BD db4o.

Dispone de metodos
para almacenar, consultar y borrar objetos,
de poder realizar transacciones.
ademas
por ello cuando se
Cada objectContainer representa una transaccion,

realice un commit() o rollback(), comienza la siguiente transaccion.


Cada objectContainer tiene sus propias referencias a objetos almacenados.

Metodos
Basicos

3.2.

Metodos
Basicos
BDOO con db4o
import com.db4o.*;
Java
ObjectContainer bd = DB4oEmbebed.openFile (DB4oEmbebed.
newConfiguration(), alumnos.dbo );
bd.store(miobjeto)
ObjectSet res= bd.QueryByExample(miobjeto)
res.size()
res.HasNext()
res.next()
bd.delete(miobjeto)
bd.close()

Descripcion.
Abre la BD que corresponde con
el fichero alumnos.dbo y sino
existe lo crea
guarda miobjeto en la bd
Buscar objetos como miobjeto.
Devuelve cuantos objetos contiene res.

Devuelve cierto si res tiene mas


objetos.
Avanza el cursor al siguiente objeto de res.
borra miobjeto en la bd
Cierra la BD

OPERACIONES BASICAS

4.
4.1.

Ejemplo2. alumno.java

Seguidamente describimos la clase alumno.


../prgcodigo/prgcod11/ejemplo2/src/alumno/alumno.java

9.8

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

OPERACIONES BASICAS

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

package alumno ;
public class alumno {
private String nombre ;
private int edad ;
private double nota ;
alumno ( String nom , int e , double n ) {
nombre = nom ;
edad = e ;
nota = n ;
}
public void setNombre ( String n ){
nombre = n ;
}
@Override
public String toString () {
return this . nombre + " " + this . edad + " " + this . nota ;
}

4.2.

Esquema de trabajo

// accessDb4o
O bj ec tC o nt ai ne r db = Db4oEmbedded . openFile ( Db4oEmbedded
. n e w C o n f i g u r a t i o n () , DB4OFILENAME );
try {
// do something with db4o
} finally {
db . close ();
}

4.3.

Abrir y cerrar la bd

O bj ec tC o nt ai ne r bd ;
String nombrefichero = " alumnos . db4o ";
bd = Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n f i g u r a t i o n () ,
nombrefichero );
bd . close ();

se puede abrir una vez, si se abre mas


veces data una
La base de datos solo
exception del tipo DatabaseFileLockedException.

4.4.

Borrar la bd

Como la base de datos es un fichero, lo haremos con la clase File.


String nombrefichero = " alumnos . db4o ";
File f = new File ( nombrefichero );
f . delete ();

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.9

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

4.5.

OPERACIONES BASICAS

Almacenar un objeto de la clase

store().
Se utiliza la funcion
alumno a1 = new alumno (" Juan " , 15 , 12.5);
bd . store ( a1 );

4.6.

Mostrar los objetos de la clase

Las consultas de las bases de datos requiere:


Indicar que tipo de objetos a buscar esto se hace a traves del objeto a.
queryByExample que devuelve un objeto del tipo
Utilizar la funcion
ObjectSet que se guarda en res. Siendo res como un cursor de objetos.
de las funcion
hasNext() que informa si hay mas

Recorrer res a traves


objetos, y next() que avanza el cursor.
System . out . println (" Recuperado objetos alumno ");
alumno a = new alumno ( null , 0 , 0);
ObjectSet res = bd . queryByE xample ( a );
System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}

toString, por ello podemos


La clase alumno reescribe (override) la funcion
imprimir los datos de un alumno y no mostrara el id del objeto, sino los atributos
del objeto.

4.7.

Modificar objetos

Para modificar un objeto debemos:


Indicar como es el objeto a buscar. Como a4.
Buscarlo. Con queryByExample.
Crear un objeto basado igual al encontrado. Seria a5.
de la clase setNombre
Modificarlo. Usamos la funcion
Guardarlo. Usamos store(a5).
System . out . println (" Modificando Vicente ");
a4 = new alumno (" Vicente " , 0 , 0);
ObjectSet res = bd . queryByE xample ( a4 );
a5 = ( alumno ) res . next ();
a5 . setNombre (" Oscar ");
bd . store ( a5 );

9.10

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

OPERACIONES BASICAS

4.8.

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

Borrar objetos

delete().
Usaremos la funcion
System . out . println (" Borrando Juan ");
alumno a6 = new alumno (" Juan " , 0 , 0);
ObjectSet res = bd . queryByE xample ( a6 );
a7 = ( alumno ) res . next ();
bd . delete ( a7 );

4.9.

Ejemplo2. Main.java

Referencia al proyecto alumno.


../prgcodigo/prgcod11/ejemplo2/src/alumno/Main.java
package alumno ;
import com . db4o . Db4oEmbedded ;
import com . db4o . O bj e ct Co nt a in er ;
import com . db4o . ObjectSet ;
import java . io . File ;
public class Main {
public static void main ( String args []) {
O bj ec tC o nt ai ne r bd ;
String nombrefichero = " alumnos . db4o ";
File f = new File ( nombrefichero );
alumno a1 , a2 , a3 , a4 , a5 , a6 , a7 ;
f . delete ();
// Conectando a la BDOO
bd = Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n f i g u r a t i o n () ,
nombrefichero );
// Almacena Alumnos
a1 = new alumno (" Juan " , 15 , 12.5);
bd . store ( a1 );
a2 = new alumno (" Vicente " , 50 , 20.1);
bd . store ( a2 );
System . out . println (" Grabados Alumnos ");
System . out . println (" Recuperado objetos alumno ");
a2 = new alumno ( null , 0 , 0);
ObjectSet res = bd . queryByE xample ( a2 );
System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
System . out . println (" Recuperado objetos alumnos de edad 50");
a3 = new alumno ( null , 50 , 0);
res = bd . quer yByExamp le ( a3 );
System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
System . out . println (" Modificando Vicent ");
a4 = new alumno (" Vicente " , 0 , 0);
res = bd . quer yByExamp le ( a4 );
a5 = ( alumno ) res . next ();
a5 . setNombre (" Oscar ");
bd . store ( a5 );
FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.11

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

OPERACIONES BASICAS

System . out . println (" Borrando Juan ");


a6 = new alumno (" Juan " , 0 , 0);
res = bd . quer yByExamp le ( a6 );
a7 = ( alumno ) res . next ();
bd . delete ( a7 );

boolean closed = bd . close ();


}
}

4.10.

Practica
3. Grabar el mismo objeto

Con el ejemplo2
1.- Que ocurre cuando no se borra la base de datos?
2.- Que ocurre si guardamos dos veces el mismo objeto en la BD?
3.- Si queremos modificar un objeto en la BD que debemos hacer antes?.
4.- El ejemplo2, cumple la propiedad de modularidad de un programa?.

4.11.

Ejercicio2b

Modificar el proyecto ejercicio2b, la clase Main, rellanando las partes que


faltan para que muestre en pantalla.
* Borrando BD alumnos . db4o
* Creando BD alumnos . db4o
* Grabando Alumnos :
Juan Almacenado
Vicente Almacenado
* Mostrando Todos
Objetos alumno recuperados : 2
Juan 15 12.5
Vicente 50 20.1
* Recuperado objetos alumnos de edad 50
Objetos alumno recuperados : 1
Vicente 50 20.1
* Modificando Vicente
* Borrando Juan

../prgcodigo/prgcod11/ejercicio2b/src/alumno1/Main.java
package alumno1 ;
import
import
import
import
import

com . db4o . Db4oEmbedded ;


com . db4o . O bj e ct Co nt a in er ;
com . db4o . ObjectSet ;
java . io . File ;
java . io . IOException ;

/**
* Version con funciones
* @author pacoaldarias < paco . al da r ia s@ ce e dc v . es >
*/
public class Main {

9.12

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

OPERACIONES BASICAS

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

public static void borrarBD ( String nombrefichero )


throws IOException
{
System . out . println ("* Borrando BD "+ nombrefichero );
File f = new File ( nombrefichero );
Borrarfichero
}
public static O bj ec t Co nt ai n er crearBD ( String nombrefichero ) {
System . out . println ("* Creando BD "+ nombrefichero );
return Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n fi g u r a t i o n () ,
nombrefichero );
}
public static void almacena ( O b je ct Co n ta in er bd ) {
System . out . println ("* Grabando Alumnos :");
alumno a1 = new alumno (" Juan " , 15 , 12.5);
Guardar a1
System . out . println ( a1 . getNombre ()+" Almacenado ");
alumno a2 = new alumno (" Vicente " , 50 , 20.1);
Guardar a2
System . out . println ( a2 . getNombre ()+" Almacenado ");
}
public static void mostrartodos ( O bj e ct Co nt a in er bd ) {
alumno a ;
ObjectSet res = null ;
System . out . println ("* Mostrando Todos ");
a = new alumno ( null , 0 , 0);
Realizar Query sobre a
System . out . println (" Objetos alumno recuperados : " + res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}
public static void mostrarconed ad ( Ob je c tC on ta i ne r bd , int edad ) {
alumno a ;
ObjectSet res = null ;
System . out . println ("* Recuperado objetos alumnos de edad " + edad );

Crear plantilla de busqueda sobre a

res = bd . quer yByExamp le ( a );


System . out . println (" Objetos alumno recuperados : " + res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.13

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

TIPOS DE CONSULTAS

public static void mo di fi c ar no mb r e ( O bj ec tC o nt ai ne r bd , String nombre ) {


alumno a , b ;
ObjectSet res = null ;
System . out . println ("* Modificando " + nombre );
a = new alumno ( nombre , 0 , 0);
res = bd . quer yByExamp le ( a );
b = ( alumno ) res . next ();
b . setNombre (" Oscar ");
Guardar b
}
public static void borrarnombre ( O bj e ct Co nt a in er bd , String nombre ) {
alumno a , b ;
ObjectSet res = null ;
System . out . println (" Borrando " + nombre );
a = new alumno ( nombre , 0 , 0);
res = bd . quer yByExamp le ( a );
b = ( alumno ) res . next ();
Borrar b
}
public static void main ( String args []) throws IOException {
O bj ec tCo nt ai ne r bd = null ;
String nombrefichero = " alumnos . db4o ";
try {
borrarBD ( nombrefichero );
bd = crearBD ( nombrefichero );
almacena ( bd );
mostrartodos ( bd );
mostr arconed ad ( bd , 50);
m od if ica rn om br e ( bd , " Vicente ");
borrarnombre ( bd , " Juan ");
} finally {
boolean closed = bd . close ();
}
}
}

5.

TIPOS DE CONSULTAS
Existen tres tipos de consultas en db4o:

1.- Query by Example (QBE).


Es es sistema visto que pregunta a la BD por un objeto igual al que se le da
como muestra.
2.- Native Queries (NQ).
Son Consultas Nativas. Es la interface principal de la BD y aconsejado por
los desarrolladores de BD.

9.14

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

CONSULTAS CON SODA

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

3.- Simple Object DataBase (SODA).


rapida.

Es el API interna. Es la mas


Tanto QBE como NQ se pasan a
SODA para realizarse la consulta internamente. Permite generar consultas

se conocen en tiempo de ejecucion.

dinamicamente,
que solo

5.1.

QBE

QBE es la forma basica


de consultar BD. Pero tiene las siguiente limitaciones:
No se puede realizar consultas complejas que contengan AND, OR,
NOT, etc.
Limita mucho tener que dar siempre un ejemplo de lo que se quiere.

No se puede preguntar por campos que su valor numericos


0, strings
vacios o que tenga algun
campo null.
Se necesita un constructor para crear objetos con campos no inicializados.

6.

SODA

6.1.

Descripcion

Para crear una consulta se necesita un objeto de tipo Query, que se crea con
query() del objeto del tipo ObjectContainer llamado bd.
la funcion

Seguidamente se le van anadiendo


Constraint (resctriccion),
para completar la
consulta. La constrain(alumno.class) hace que nos quedemos con los objetos de
la clase alumno.
execute() del objeto del tipo
Para ejecutar la consulta se ejecuta con la funcion
Query, y el resultado se guarda en un objeto de tipo ObjectSet.

6.2.

Metodos
SODA

Metodos
de SODA con db4o
import com.db4o.query.Constraint; import com.db4o.query.Query;

Java
Descripcion.
Query query = bd.query();
Inicializa la consulta SODA.

de clase
Constrain constrain = query.constrain(Miclase.class);
Anade
restriccion

con nombre
Anade
restriccion
constrain = query.descend(nombre).constrain(mitexto);
igual a mitexto
ObjectSet res = query.execute();

7.

Ejecuta la consulta

CONSULTAS CON SODA


Se tomara el Ejemplo3.java.
FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.15

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

7.1.

CONSULTAS CON SODA

Consulta 1. Todos

Ejemplo que muestra todos los objetos de la clase alumnos.


Constrain:
query.constrain(alumno.class);

Funcion:
public static void consulta1 ( Ob je ct C on ta in e r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {

System . out . println ("* Consulta 1 SODA : Alumnos ");


Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
ObjectSet res = query . execute ();
System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}

Ejecucion:
* Consulta 1 SODA : Alumnos
Objetos alumno recuperados : 3
Nombre : Juan Edad : 15 Nota : 4.5
Nombre : Vicente Edad : 50 Nota : 8.1
Nombre : Paco Edad : 25 Nota : 10.0

Lo que se va a construir es una consulta con una serie de nodos los cuales lo
que permite es quedarse con candidatos que cumplan la constrain. Los objetos de
tipo Query son punteros a a un nodo en SODA.

7.2.

Consulta 2. Igual a un valor

Ejemplo que muestra todos los objetos de la clase alumno y con atributo
nombre igual a Juan.
Constrain:
constrain = query.constrain(alumno.class);
constrain = query.descend("nombre").constrain("Juan");

Funcion:
public static void consulta2 ( Ob je ct C on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 2 Soda : Alumno Juan ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" nombre "). constrain (" Juan ");

9.16

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

CONSULTAS CON SODA

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

ObjectSet res = query . execute ();


System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}

Ejecucion:
* Consulta 2 Soda : Alumno Juan
Objetos alumno recuperados : 1
Nombre : Juan Edad : 15 Nota : 4.5

7.3.

Consulta 3. Not

Ejemplo que muestra todos los objetos de la clase alumno y con atributo edad
no sea 50
Constrain:
constrain = query.constrain(alumno.class);
constrain = query.descend("edad").constrain(50).not();

Funcion:
public static void consulta3 ( Ob je ct C on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 3 Soda : Alumno edad no sea 50 ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" edad "). constrain (50). not ();
ObjectSet res = query . execute ();
System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}

Ejecucion:
* Consulta 3 Soda : Alumno edad no sea 50
Objetos alumno recuperados : 2
Nombre : Juan Edad : 15 Nota : 4.5
Nombre : Paco Edad : 25 Nota : 10.0

7.4.

Consulta 4. And

Ejemplo que muestra todos los objetos de la clase alumno con edad menor que
30 y mayor que 10.
Constrain:

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.17

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

CONSULTAS CON SODA

constrain = query.constrain(alumno.class);
constrain = query.descend("edad").constrain(30).smaller();
constrain = query.descend("edad").constrain(10).greater().and(constrain);

Funcion:
public static void consulta4 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 4 Soda : Alumno con edad menor que 30 "
+ " y mayor 10 ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" edad "). constrain (30). smaller ();
constrain = query . descend (" edad "). constrain (10). greater ().
and ( constrain );
ObjectSet res = query . execute ();
System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}

Ejecucion:
* Consulta 4 Soda : Alumno con edad menor que 30 y mayor 10
Objetos alumno recuperados : 2
Nombre : Juan Edad : 15 Nota : 4.5
Nombre : Paco Edad : 25 Nota : 10.0

7.5.

Consulta 5. Or

Ejemplo que muestra todos los objetos de la clase alumno con edad menor que
40 o mayor que 9.
Constrain:
Constraint constrain = query.constrain(alumno.class);
constrain = query.descend("edad").constrain(40).smaller();
constrain = query.descend("nota").constrain(9).greater().
or(constrain);

Funcion:
public static void consulta5 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 5 Soda : Alumno con edad menor 40"
+ " o nota mayor que 9 ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" edad "). constrain (40). smaller ();
constrain = query . descend (" nota "). constrain (9). greater ().
or ( constrain );
ObjectSet res = query . execute ();
m o s t r a r R e s u l t a d o s ( res );
}

9.18

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

CONSULTAS CON SODA

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

Ejecucion:
* Consulta 5 Soda : Alumno con edad mayor 20 o nota mayor que 5
Objetos alumno recuperados : 2
Nombre : Juan Edad : 15 Nota : 4.5
Nombre : Paco Edad : 25 Nota : 10.0

7.6.

Consulta 6. Ordenados

Ejemplo que muestra todos los objetos de la clase alumno ordenados.


Constrain:
query.constrain(alumno.class);
query.descend("edad").orderAscending();

Funcion:
public static void consulta6 ( Ob je ct C on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 6 Soda : Ordenar por edad ");
Query query = bd . query ();
query . constrain ( alumno . class );
query . descend (" edad "). or derAscen ding ();
ObjectSet res = query . execute ();
m o s t r a r R e s u l t a d o s ( res );
}

Ejecucion:
* Consulta 6 Soda : Ordenar por edad
Objetos alumno recuperados : 3
Nombre : Juan Edad : 15 Nota : 4.5
Nombre : Paco Edad : 25 Nota : 10.0
Nombre : Vicente Edad : 50 Nota : 8.1

7.7.

Ejemplo3: Main.java

../prgcodigo/prgcod11/ejemplo3/src/alumno/Main.java
package alumno ;
import com . db4o .*;
import com . db4o . ext . D a t a b a s e C l o s e d E x c e p t i o n ;
import com . db4o . ext . D b4 oI O Ex ce pt i on ;
import com . db4o . query . Constraint ;
import com . db4o . query . Query ;
import java . io . File ;
import java . io . IOException ;
public class Main {
public static void borrarBD ( String nombrefichero )
throws IOException
{
System . out . println ("* Borrando BD "+ nombrefichero );
File f = new File ( nombrefichero );
f . delete ();
FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.19

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

CONSULTAS CON SODA

public static O bj ec t Co nt ai n er crearBD ( String nombrefichero ) {


System . out . println ("* Creando BD "+ nombrefichero );
return Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n fi g u r a t i o n () ,
nombrefichero );
}
public static void cerrarBD ( O b je ct Co n ta in er bd ) throws D b4 oI O Ex ce pt i on {
boolean closed = bd . close ();
}

public static void almacena ( O b je ct Co n ta in er bd ) {


System . out . println ("* Grabando Alumnos :");
alumno a1 = new alumno (" Juan " , 15 , 4.5);
bd . store ( a1 );
System . out . println ( a1 . getNombre ()+" Almacenado ");
alumno a2 = new alumno (" Vicente " , 50 , 8.1);
bd . store ( a2 );
System . out . println ( a2 . getNombre ()+" Almacenado ");
alumno a3 = new alumno (" Paco " , 25 , 10.0);
bd . store ( a3 );
System . out . println ( a3 . getNombre ()+" Almacenado ");
}
public static void consulta1 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {

System . out . println ("* Consulta 1 SODA : Alumnos ");


Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
ObjectSet res = query . execute ();
m o s t r a rR e s u l t a d o s ( res );
}
public static void consulta2 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 2 Soda : Alumno Juan ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" nombre "). constrain (" Juan ");
ObjectSet res = query . execute ();
m o s t r a rR e s u l t a d o s ( res );
}
public static void consulta3 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 3 Soda : Alumno edad no sea 50 ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" edad "). constrain (50). not ();
ObjectSet res = query . execute ();
m o s t r a rR e s u l t a d o s ( res );
}
public static void consulta4 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 4 Soda : Alumno con edad menor que 30 "
+ " y mayor 10 ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" edad "). constrain (30). smaller ();

9.20

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

CONSULTAS CON SODA

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

constrain = query . descend (" edad "). constrain (10). greater ().
and ( constrain );
ObjectSet res = query . execute ();
m o s t r a r R e s u l t a d o s ( res );
}
public static void consulta5 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 5 Soda : Alumno con edad menor 40"
+ " o nota mayor que 9 ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
constrain = query . descend (" edad "). constrain (40). smaller ();
constrain = query . descend (" nota "). constrain (9). greater ()
. or ( constrain );
ObjectSet res = query . execute ();
m o s t r a r R e s u l t a d o s ( res );
}
public static void consulta6 ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta 6 Soda : Ordenar por edad ");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
Query ord erAscen ding = query . descend (" edad "). ord erAscend ing ();
ObjectSet res = query . execute ();
m o s t r a r R e s u l t a d o s ( res );
}
public static void m o s tr a r R e s u l t a d o s ( ObjectSet res ) {
System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}
public static void main ( String args []) throws IOException {
O bj ec tC o nt ai ne r bd ;
String nombrefichero = " alumnossoda . db4o ";
borrarBD ( nombrefichero );
bd = crearBD ( nombrefichero );
almacena ( bd );
consulta1 ( bd );
consulta2 ( bd );
consulta3 ( bd );
consulta4 ( bd );
consulta5 ( bd );
consulta6 ( bd );
cerrarBD ( bd );
}
}

7.8.

Ejercicio3

pequena
de
Hacer una consulta que muestre los alumnos que su nota se mas
grande que 9. Anadir

consulta, al ejercicio
40 y no sea mas
una nueva funcion
anterior.

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.21

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

8.

OBJETOS ESTRUCTURADOS

OBJETOS ESTRUCTURADOS

8.1.

Definicion

Llamamos objeto estructurado cuando una clase contiene otros objetos que
son clases.

8.2.

Ejemplo4

En este ejemplo un proyecto se le asigna a un alumno, y vamos a insertar filas,


y hacer consultas SODA y QBE

Diagrama de Paquetes: Ver la figura 3 de la pagina


22.

Figura 3: Diagrama de paquetes del proyecto ejemplo4.

Diagrama de Clases: Ver la figura 4 de la pagina


22.

Figura 4: Diagrama de Clases del Paquete ejemplo4

9.22

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

OBJETOS ESTRUCTURADOS

8.2.1.

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

Clase proyecto

Lo definimos como formado por un alumno:


public class proyecto {
private String descripcion ;
private alumno al ;
...
}

../prgcodigo/prgcod11/ejemplo4/src/ejemplo4/proyecto.java
package ejemplo4 ;
public class proyecto {
private String descripcion ;
private alumno al ;
public proyecto ( String string ) {
this . descripcion = string ;
this . al = null ;
}
public void setAlumno ( alumno a1 ) {
this . al = a1 ;
}
@Override
public String toString (){
return " Proyecto :" + descripcion + " "+ al ;
}
}

8.2.2.

Clase alumno

Es la misma que la del ejemplo2.


../prgcodigo/prgcod11/ejemplo4/src/ejemplo4/alumno.java
package ejemplo4 ;
public class alumno {
private String nombre ;
private int edad ;
private double nota ;
alumno ( String nom , int e , double n ) {
nombre = nom ;
edad = e ;
nota = n ;
}
public void setNombre ( String n ){
nombre = n ;
}
@Override
public String toString () {
return " Nombre :"+ this . nombre + " Edad :" + this . edad + " Nota :" + this . nota ;
FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.23

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

OBJETOS ESTRUCTURADOS

}
String getNombre () {
return nombre ;
}
}

8.2.3.

Clase Main.java

Tenemos que crear el alumno.


Insercion:
public static void almacena ( O b je ct Co n ta in er bd ) {
...
proyecto p1 = new proyecto (" Web Alumnos ");
alumno a1 = new alumno (" Paco " ,23 ,8.75);
p1 . setAlumno ( a1 );
bd . store ( p1 );
System . out . println ( p1 . toString ()+" Almacenado ");
...
}

Consulta SODA : Igual que con datos simples.


public static void consultaSoda ( O bj e ct Co nt a in er bd ) {
...
Query query = bd . query ();
Constraint constrain = query . constrain ( proyecto . class );
constrain = query . descend (" descripcion "). constrain (" Web Profesores ");
ObjectSet res = query . execute ();
...
}

Consulta QBE : Aunque un alumno este dentro de proyecto, podemos preguntar


por alumno.
public static void consultaQBE ( O bj ec t Co nt ai n er bd ) {
...
alumno a = new alumno ( null ,0 ,0);
ObjectSet res = bd . queryByE xample ( a );
...
}

La clase Main entera sera:


../prgcodigo/prgcod11/ejemplo4/src/ejemplo4/Main.java
package ejemplo4 ;
import com . db4o .*;
import com . db4o . ext . D a t a b a s e C l o s e d E x c e p t i o n ;
import com . db4o . ext . D b4 oI O Ex ce pt i on ;
import com . db4o . query . Constraint ;
import com . db4o . query . Query ;
import java . io . File ;
import java . io . IOException ;
public class Main {
public static void borrarBD ( String nombrefichero )
throws IOException
{
System . out . println ("* Borrando BD "+ nombrefichero );
File f = new File ( nombrefichero );

9.24

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

OBJETOS ESTRUCTURADOS

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

f . delete ();
}

public static O bj ec t Co nt ai n er crearBD ( String nombrefichero ) {


System . out . println ("* Creando BD "+ nombrefichero );
return Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n fi g u r a t i o n () ,
nombrefichero );
}
public static void cerrarBD ( O b je ct Co n ta in er bd ) throws D b4 oI O Ex ce pt i on {
boolean closed = bd . close ();
}

public static void almacena ( O b je ct Co n ta in er bd ) {


System . out . println ("* Grabando Proyectos :");
proyecto p1 = new proyecto (" Web Alumnos ");
alumno a1 = new alumno (" Paco " ,23 ,8.75);
p1 . setAlumno ( a1 );
bd . store ( p1 );
System . out . println ( p1 . toString ()+" Almacenado ");
proyecto p2 = new proyecto (" Web Profesores ");
alumno a2 = new alumno (" Juan " ,10 ,5.5);
p2 . setAlumno ( a2 );
bd . store ( p2 );
System . out . println ( p2 . toString ()+" Almacenado ");
}
public static void consultaSoda ( O bj e ct Co nt a in er bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta SODA : Proyectos Web Profesores ");
Query query = bd . query ();
Constraint constrain = query . constrain ( proyecto . class );
constrain = query . descend (" descripcion ").
constrain (" Web Profesores ");
ObjectSet res = query . execute ();
m o s t r a r R e s u l t a d o s ( res );
}
public static void consultaQBE ( O bj ec t Co nt ai n er bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Consulta QBE : Alumnos ");
alumno a = new alumno ( null ,0 ,0);
ObjectSet res = bd . queryByE xample ( a );
m o s t r a r R e s u l t a d o s ( res );
}

public static void m o s tr a r R e s u l t a d o s ( ObjectSet res ) {


System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}
public static void main ( String args []) throws IOException {
O bj ec tC o nt ai ne r bd ;
String nombrefichero = " proyecto . db4o ";
bd = crearBD ( nombrefichero );

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.25

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

BORRADO DE OBJETOS ESTRUCTURADOS

almacena ( bd );
consultaSoda ( bd );
consultaQBE ( bd );
cerrarBD ( bd );
borrarBD ( nombrefichero );
}
}

Ejecucion:
* Creando BD proyecto . db4o
* Grabando Proyectos :
Proyecto : Web Alumnos Nombre : Paco Edad :23 Nota :8.75 Almacenado
Proyecto : Web Profesores Nombre : Juan Edad :10 Nota :5.5 Almacenado
* Consulta SODA : Proyectos Web Profesores
Objetos alumno recuperados : 1
Proyecto : Web Profesores Nombre : Juan Edad :10 Nota :5.5
* Consulta QBE : Alumnos
Objetos alumno recuperados : 2
Nombre : Paco Edad :23 Nota :8.75
Nombre : Juan Edad :10 Nota :5.5
* Borrando BD proyecto . db4o

9.

BORRADO DE OBJETOS ESTRUCTURADOS

9.1.

Definicion

Si por
El borrado de objetos estructurados es similar que cuando no lo estan.
ejemplo borramos un proyecto, el alumno asociado al proyecto seguira existiendo.
de hacer un borrado en cascada, que permitira que al borrar un
Cabe la opcion
proyecto se borre el alumno asociado.

9.2.

Ejemplo5

Tomamos el ejemplo4, todo menos el Main que lo modificamos.


Borrado en cascada: Requiere import com.db4o.config.EmbeddedConfiguration.

Al borrar un proyecto se borrara el alumno asociado. Si lo abrieramos


de forma
normal, el alumno no se borrara.
Creamos la BD con borrado en cascada:
private static O b je ct Co n ta in e r crearB DEmbebed ( String nombrefichero ) {
System . out . println ("* Creando BD con borrado en cascada "
+ nombrefichero );
E m b e d d e d C o n f i g u r a t i o n config = Db4oEmbedded . n e w C o n f i g u ra t i o n ();
config . common (). objectClass ( proyecto . class ). c as ca de O nD el et e ( true );
return Db4oEmbedded . openFile ( config , nombrefichero );
}

La clase Main entera sera:


../prgcodigo/prgcod11/ejemplo5/src/ejemplo5/Main.java
package ejemplo5 ;
import com . db4o .*;

9.26

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

BORRADO DE OBJETOS ESTRUCTURADOS

import
import
import
import
import
import
import

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

com . db4o . config . E m b e d d e d C o n f i g u r a t i o n ; // Cascade


com . db4o . ext . D a t a b a s e C l o s e d E x c e p t i o n ;
com . db4o . ext . D b4 oI O Ex ce pt i on ;
com . db4o . query . Constraint ;
com . db4o . query . Query ;
java . io . File ;
java . io . IOException ;

public class Main {


public static void borrarBD ( String nombrefichero )
throws IOException
{
System . out . println ("* Borrando BD "+ nombrefichero );
File f = new File ( nombrefichero );
f . delete ();
}
private static O b je ct Co n ta in er crearB DEmbebed ( String nombrefichero ) {
System . out . println ("* Creando BD con borrado en cascada "
+ nombrefichero );
E m b e d d e d C o n f i g u r a t i o n config = Db4oEmbedded . n e w C o n f i g ur a t i o n ();
config . common (). objectClass ( proyecto . class ). c as ca de O nD el et e ( true );
return Db4oEmbedded . openFile ( config , nombrefichero );
}
public static O bj ec t Co nt ai n er crearBD ( String nombrefichero ) {
System . out . println ("* Creando BD Normal "+ nombrefichero );
return Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n fi g u r a t i o n () ,
nombrefichero );
}
public static void cerrarBD ( O b je ct Co n ta in er bd ) throws D b4 oI O Ex ce pt i on {
boolean closed = bd . close ();
}

public static void almacena ( O b je ct Co n ta in er bd ) {


System . out . println ("* Grabando Proyectos :");
proyecto p1 = new proyecto (" Web Alumnos ");
alumno a1 = new alumno (" Paco " ,23 ,8.75);
p1 . setAlumno ( a1 );
bd . store ( p1 );
System . out . println ( p1 . toString ()+" Almacenado ");
proyecto p2 = new proyecto (" Web Profesores ");
alumno a2 = new alumno (" Juan " ,10 ,5.5);
p2 . setAlumno ( a2 );
bd . store ( p2 );
System . out . println ( p2 . toString ()+" Almacenado ");
}
public static void most rarAlumn os ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Alumnos :");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
ObjectSet res = query . execute ();
m o s t r a r R e s u l t a d o s ( res );
}
public static void m o s t r a r P r o y ec t o s ( O bj ec t Co nt ai n er bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.27

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

BORRADO DE OBJETOS ESTRUCTURADOS

System . out . println ("* Proyectos :");


Query query = bd . query ();
Constraint constrain = query . constrain ( proyecto . class );
ObjectSet res = query . execute ();
m o s t r a rR e s u l t a d o s ( res );
}

public static void m o s t r a r R e s u l t a d o s ( ObjectSet res ) {


System . out . println (" Objetos alumno recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}
public static void borr arProyec to ( Ob je c tC on ta i ne r bd ) {
System . out . println ("* Borrado : Proyecto Web Profesores :");
Query query = bd . query ();
Constraint constrain = query . constrain ( proyecto . class );
constrain = query . descend (" descripcion ").
constrain (" Web Profesores ");
ObjectSet res = query . execute ();
proyecto p = ( proyecto ) res . next ();
bd . delete ( p );
}
public static void main ( String args []) throws IOException {
O bj ec tCo nt ai ne r bd ;
String nombrefichero = " proyecto . db4o ";
// bd = crearBD ( nombrefichero );
bd = crear BDEmbeb ed ( nombrefichero );
almacena ( bd );
m o s t r a r P r o y e c t o s ( bd );
mostr arAlumn os ( bd );
borra rProyec to ( bd );
m o s t r a r P r o y e c t o s ( bd );
mostr arAlumn os ( bd );
cerrarBD ( bd );
borrarBD ( nombrefichero );
}
}

Se aprecia el borrado en cascada. Si borramos el proyecto Web


Ejecucion:
el alumno asociado que es Juan.
Profesores se borrara tambien
* Creando BD con borrado en cascada proyecto . db4o
* Grabando Proyectos :
Proyecto : Web Alumnos Nombre : Paco Edad :23 Nota :8.75 Almacenado
Proyecto : Web Profesores Nombre : Juan Edad :10 Nota :5.5 Almacenado
* Proyectos :
Objetos alumno recuperados : 2
Proyecto : Web Alumnos Nombre : Paco Edad :23 Nota :8.75
Proyecto : Web Profesores Nombre : Juan Edad :10 Nota :5.5
* Alumnos :
Objetos alumno recuperados : 2
Nombre : Paco Edad :23 Nota :8.75
Nombre : Juan Edad :10 Nota :5.5
* Borrado : Proyecto Web Profesores :
* Proyectos :
Objetos alumno recuperados : 1
Proyecto : Web Alumnos Nombre : Paco Edad :23 Nota :8.75
* Alumnos :
Objetos alumno recuperados : 1
Nombre : Paco Edad :23 Nota :8.75

9.28

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

10

VECTOR DE OBJETOS

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

* Borrando BD proyecto . db4o

10.

VECTOR DE OBJETOS

Igual que un vector puede contener tipos basicos


es posible almancenar
objetos.

10.1.

Ejemplo6

En el siguiente ejemplo la clase profesor va a contener varios proyectos.


Tomaremos como referencia el ejemplo5 las clases alumno y proyecto. Y
definiremos la nueva clase profesor. Modificaremos la clase main para realizar
operaciones de almacenamiento y consulta de profesor.
Diagrama de Clases del ejemplo6:

Ver la figura 5 de la pagina


29.

Figura 5: Diagrama de Clases del Paquete ejemplo6

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.29

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

10.2.

10

VECTOR DE OBJETOS

Clase profesor

La clase profesor tiene el nombre del profesor y un vector de objetos de tipo


proyecto.
private proyectos listapr oyectos [];
private String nombre ;

../prgcodigo/prgcod11/ejemplo6/src/ejemplo6/profesor.java
package ejemplo6 ;
public class profesor {
private proyectos listapr oyectos [];
private String nombre ;
profesor ( proyectos [] l , String n ){
this . nombre = n ;
this . lis taproye ctos = l ;
}
@Override
public String toString (){
String str = new String ();
for ( proyectos l : listap royectos ){
str = str +"\ n "+ l . toString ();
}
return " - Nombre Profesor :"+ nombre + str ;
}
}

10.3.

Clase Main

1.- Grabar Profesor


Para grabar un profesor debemos crear un objeto de tipo profesor y pasarle
al constructor un vector de proyectos y su nombre.
public static void almacena ( O b je ct Co n ta in er bd ) {
...
profesor pr1 = new profesor ( new proyectos [] { p1 , p2 } ," Pablo ");
bd . store ( pr1 );
...
}

2.- Mostrar Profesores.


Para mostrar los profesores usando QBE nos creamos un proyecto de
plantilla:
public static void m o s t r a r P r o f e s o r e s ( O bj e ct Co n ta in er bd ) {
proyectos p = new proyectos ( null );
profesor pr = new profesor ( new proyectos []{ p } , null );
ObjectSet res = bd . queryByE xample ( pr );
...
}

de la consulta sera:
La ejecucion

9.30

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

10

VECTOR DE OBJETOS

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

* Profesores :
Objetos recuperados : 2
- Nombre Profesor : Pablo
- Nombre Proyecto : Drupal
- Nombre Alumno : Paco Edad :23 Nota :8.75
- Nombre Proyecto : Android
- Nombre Alumno : Juan Edad :10 Nota :5.5
- Nombre Profesor : Pepe
- Nombre Proyecto : Moodle
- Nombre Alumno : Andres Edad :45 Nota :2.0

Todo el codigo
fuente sera:
../prgcodigo/prgcod11/ejemplo6/src/ejemplo6/Main.java
package ejemplo6 ;
import com . db4o .*;
import com . db4o . config . E m b e d d e d C o n f i g u r a t i o n ; // Cascade
import com . db4o . ext . D a t a b a s e C l o s e d E x c e p t i o n ;
import com . db4o . ext . D b4 oI O Ex ce pt i on ;
import com . db4o . query . Constraint ;
import com . db4o . query . Query ;
import java . io . File ;
import java . io . IOException ;
public class Main {
public static void borrarBD ( String nombrefichero )
throws IOException
{
System . out . println ("* Borrando BD "+ nombrefichero );
File f = new File ( nombrefichero );
f . delete ();
}
private static O b je ct Co n ta in er crearB DEmbebed ( String nombrefichero ) {
System . out . println ("* Creando BD con borrado en cascada "
+ nombrefichero );
E m b e d d e d C o n f i g u r a t i o n config = Db4oEmbedded . n e w C o n f i g ur a t i o n ();
config . common (). objectClass ( proyectos . class ). c as ca d eO nD e le te ( true );
return Db4oEmbedded . openFile ( config , nombrefichero );
}
public static O bj ec t Co nt ai n er crearBD ( String nombrefichero ) {
System . out . println ("* Creando BD Normal "+ nombrefichero );
return Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n fi g u r a t i o n () ,
nombrefichero );
}
public static void cerrarBD ( O b je ct Co n ta in er bd ) throws D b4 oI O Ex ce pt i on {
boolean closed = bd . close ();
}

public static void almacena ( O b je ct Co n ta in er bd ) {


System . out . println ("* Grabando Profesores :");

proyectos p1 = new proyectos (" Drupal ");


alumno a1 = new alumno (" Paco " ,23 ,8.75);
p1 . setAlumno ( a1 );
bd . store ( p1 );
System . out . println ( p1 . toString ()+" Almacenado ");

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.31

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

10

VECTOR DE OBJETOS

proyectos p2 = new proyectos (" Android ");


alumno a2 = new alumno (" Juan " ,10 ,5.5);
p2 . setAlumno ( a2 );
bd . store ( p2 );
System . out . println ( p2 . toString ()+" Almacenado ");
proyectos p3 = new proyectos (" Moodle ");
alumno a3 = new alumno (" Andres " ,45 ,2);
p3 . setAlumno ( a3 );
bd . store ( p3 );
System . out . println ( p3 . toString ()+" Almacenado ");
profesor pr1 = new profesor ( new proyectos [] { p1 , p2 } ," Pablo ");
bd . store ( pr1 );
System . out . println ( pr1 . toString ()+" Almacenado ");
profesor pr2 = new profesor ( new proyectos [] { p3 } ," Pepe ");
bd . store ( pr2 );
System . out . println ( pr2 . toString ()+" Almacenado ");
}
public static void m o s t r a r P r o f e s o r e s ( O b je ct Co n ta in er bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Profesores :");
proyectos p = new proyectos ( null );
profesor pr = new profesor ( new proyectos []{ p } , null );
ObjectSet res = bd . queryByE xample ( pr );
m o s t r a rR e s u l t a d o s ( res );
}
public static void most rarAlum nos ( Ob je c tC on ta i ne r bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Alumnos :");
Query query = bd . query ();
Constraint constrain = query . constrain ( alumno . class );
ObjectSet res = query . execute ();
m o s t r a rR e s u l t a d o s ( res );
}
public static void m o s t r a r P r o y ec t o s ( O bj ec t Co nt ai n er bd )
throws D a t a b a s e C l o s e d E x c e p t i o n {
System . out . println ("* Proyectos :");
Query query = bd . query ();
Constraint constrain = query . constrain ( proyectos . class );
ObjectSet res = query . execute ();
m o s t r a rR e s u l t a d o s ( res );
}

public static void m o s t r a r R e s u l t a d o s ( ObjectSet res ) {


System . out . println (" Objetos recuperados : "+ res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}

public static void main ( String args []) throws IOException {


O bj ec tCo nt ai ne r bd ;
String nombrefichero = " proyecto . db4o ";
// bd = crearBD ( nombrefichero );

9.32

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

10

VECTOR DE OBJETOS

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

bd = crear BDEmbeb ed ( nombrefichero );


almacena ( bd );
mostr arAlumn os ( bd );
m o s t r a r P r o y e c t o s ( bd );
m o s t r a r P r o f e s o r e s ( bd );
cerrarBD ( bd );
borrarBD ( nombrefichero );
}
}

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.33

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

11.
11.1.

11

ORIENTACION

ORIENTACION
Objetivos

Los objetivos son:

Saber como se anade


una libreria a una apliacion.

Saber como se puede anadir,


borrar, modificar un objetos.
Saber realizar consultas con QBE y con SODA.
Saber gestionar objetos estructurados.

11.2.

Codigo
Fuente

El codigo
se puede encontrar para:
Ejemplos:
git clone https://bitbucket.org/1415ceed1/1415ceed1prgt9e10.
git
Ejercicios:
git clone https://bitbucket.org/1415ceed1/1415ceed1prgt9e20.
git

11.3.

Software

Se recomienda el siguiente software:


Sistema Operativo: Linux
IDE: Netbeans.
BDOO: db4o

11.4.

Datos bibliograficos

Al final del documento se pueden ver las referencias bibliograficas.


Comentarios:
[MP11]. Tema 9. Persistencia de los objetos en bases de datos
orientadas a objetos.

11.5.

Recursos en Internet
Web Oficial Db4o
http://www.db4o.com/

9.34

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

12

EJERCICIOS PROPUESTOS

12.

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

EJERCICIOS PROPUESTOS

12.1.

Ejercicio1

Modificar el proyecto ejercicio2b, la clase Main, rellanando las partes que


faltan para que muestre en pantalla.
* Borrando BD alumnos . db4o
* Creando BD alumnos . db4o
* Grabando Alumnos :
Juan Almacenado
Vicente Almacenado
* Mostrando Todos
Objetos alumno recuperados : 2
Juan 15 12.5
Vicente 50 20.1
* Recuperado objetos alumnos de edad 50
Objetos alumno recuperados : 1
Vicente 50 20.1
* Modificando Vicente
* Borrando Juan

../prgcodigo/prgcod11/ejercicio2b/src/alumno1/Main.java
package alumno1 ;
import
import
import
import
import

com . db4o . Db4oEmbedded ;


com . db4o . O bj e ct Co nt a in er ;
com . db4o . ObjectSet ;
java . io . File ;
java . io . IOException ;

/**
* Version con funciones
* @author pacoaldarias < paco . al da r ia s@ ce e dc v . es >
*/
public class Main {
public static void borrarBD ( String nombrefichero )
throws IOException
{
System . out . println ("* Borrando BD "+ nombrefichero );
File f = new File ( nombrefichero );
Borrarfichero
}
public static O bj ec t Co nt ai n er crearBD ( String nombrefichero ) {
System . out . println ("* Creando BD "+ nombrefichero );
return Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n fi g u r a t i o n () ,
nombrefichero );
}
public static void almacena ( O b je ct Co n ta in er bd ) {
System . out . println ("* Grabando Alumnos :");
alumno a1 = new alumno (" Juan " , 15 , 12.5);
Guardar a1
System . out . println ( a1 . getNombre ()+" Almacenado ");
alumno a2 = new alumno (" Vicente " , 50 , 20.1);
Guardar a2

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.35

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

12

EJERCICIOS PROPUESTOS

System . out . println ( a2 . getNombre ()+" Almacenado ");


}
public static void mostrartodos ( O bj e ct Co nt a in er bd ) {
alumno a ;
ObjectSet res = null ;
System . out . println ("* Mostrando Todos ");
a = new alumno ( null , 0 , 0);
Realizar Query sobre a
System . out . println (" Objetos alumno recuperados : " + res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}
public static void most rarconed ad ( Ob je c tC on ta i ne r bd , int edad ) {
alumno a ;
ObjectSet res = null ;
System . out . println ("* Recuperado objetos alumnos de edad " + edad );

Crear plantilla de busqueda sobre a

res = bd . quer yByExamp le ( a );


System . out . println (" Objetos alumno recuperados : " + res . size ());
while ( res . hasNext ()) {
System . out . println ( res . next ()); // toString
}
}
public static void mo di fi c ar no mb r e ( O bj ec tC o nt ai ne r bd , String nombre ) {
alumno a , b ;
ObjectSet res = null ;
System . out . println ("* Modificando " + nombre );
a = new alumno ( nombre , 0 , 0);
res = bd . quer yByExamp le ( a );
b = ( alumno ) res . next ();
b . setNombre (" Oscar ");
Guardar b
}
public static void borrarnombre ( O bj e ct Co nt a in er bd , String nombre ) {
alumno a , b ;
ObjectSet res = null ;
System . out . println (" Borrando " + nombre );
a = new alumno ( nombre , 0 , 0);
res = bd . quer yByExamp le ( a );
b = ( alumno ) res . next ();
Borrar b

9.36

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

12

EJERCICIOS PROPUESTOS

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

}
public static void main ( String args []) throws IOException {
O bj ec tC o nt ai ne r bd = null ;
String nombrefichero = " alumnos . db4o ";
try {
borrarBD ( nombrefichero );
bd = crearBD ( nombrefichero );
almacena ( bd );
mostrartodos ( bd );
mostr arconed ad ( bd , 50);
m od if ic a rn om br e ( bd , " Vicente ");
borrarnombre ( bd , " Juan ");
} finally {
boolean closed = bd . close ();
}
}
}

Ver apartado 4.11 de la pagina


12

12.2.

Ejercicio2

pequena
de
Hacer una consulta que muestre los alumnos que su nota se mas
grande que 9. Anadir

consulta, al ejercicio
40 y no sea mas
una nueva funcion
anterior.

Ver apartado 7.8 de la pagina


21

12.3.

Ejercicio3

pequena
de
Hacer una consulta que muestre los alumnos que su nota se mas
grande que 9. Anadir

consulta, al ejercicio
40 y no sea mas
una nueva funcion
anterior.

12.4.

Ejercicio4

Realiza una consulta a la base de datos de alumnos del ejemplo y selecciona

aquellos alumnos que no se llamen Fernando Gil y ordenalos


ascendentemente.
../prgcodigo/prgcod11/Libro1/src/libro1/alumno.java
package libro1 ;
public class alumno {
private String nombre ;
private int edad ;
private double nota ;
alumno ( String nom , int e , double n ) {
nombre = nom ;
edad = e ;
nota = n ;
}
FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.37

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

12

EJERCICIOS PROPUESTOS

public void setNombre ( String n ){


nombre = n ;
}
@Override
public String toString () {
return "
- Nombre Alumno :"+ this . nombre + " Edad :"
+ this . edad + " Nota :" + this . nota ;
}
String getNombre () {
return nombre ;
}
}

../prgcodigo/prgcod11/Libro1/src/libro1/Main.java
package libro1 ;
import java . io .*;
import com . db4o .*;
import com . db4o . query .*;
public class Main {
public static void main ( String [] args ) {
new File (" alumnos . db4o "). delete ();
O bj ec tCo nt ai ne r bd =
Db4oEmbedded . openFile ( Db4oEmbedded . n e w C o n f i g u r a t i o n () ,
" alumnos . db4o ");
try {
a l m a c e n a r P r o y e c t o s ( bd );
} catch ( Exception e ) {
} finally {
bd . close ();
}
}
public static void a l m a c e n a r P r o y e c t o s ( Ob je ct C on ta in e r bd ) {
proyecto p1 = new proyecto (" Robot con m i c r o c o n t r o l a d o r e s ");
alumno a1 = new alumno (" Juan G ~
A mez " , 23 , 8.75);
p1 . setAlumno ( a1 );
bd . store ( p1 );
System . out . println ( p1 . toString () + " Almacenado ");
proyecto p2 = new proyecto (" Webmin sobre Ubuntu ");
alumno a2 = new alumno (" Emilio Anaya " , 24 , 6.25);
p2 . setAlumno ( a2 );
bd . store ( p2 );
System . out . println ( p2 . toString () + " Almacenado ");
proyecto p3 = new proyecto (" Joomla y Drupal ");
alumno a3 = new alumno (" Angeles Blanco " , 26 , 7);
p3 . setAlumno ( a3 );
bd . store ( p3 );
System . out . println ( p3 . toString () + " Almacenado ");
proyecto p4 = new proyecto (" Doctor Profiler ");
alumno a4 = new alumno (" Luis Alberto G a r c ~
A a " , 29 , 9.5);
p4 . setAlumno ( a4 );
bd . store ( p4 );
System . out . println ( p4 . toString () + " Almacenado ");
}

9.38

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

BIBLIOGRAFIA

TEMA 9. BASES DE DATOS ORIENTADAS A OBJETOS

public static void m o s t r a r R e s u lt a d o ( ObjectSet res ) {


System . out . println (" Recuperados " + res . size () + " Objetos ");
while ( res . hasNext ()) {
System . out . println ( res . next ());
}
}

12.5.

Ejercicio5

Realiza una consulta a la base de datos de alumnos y selecciona aquellos


Rosique o Juan Gamez.

alumnos que no se llamen Andres


Reutiliza el codigo
visto en el captulo.

BIBLIOGRAFIA
Ra-ma, 1 edition, 2011.
[MP11] JUAN CARLOS MORENO PEREZ. Programacion.
ISBN: 978-84-9964-088-4. LIBRO ALUMNO CICLOS. PRECIO: 35 EUR.

FRANCISCO ALDARIAS RAYA. CFGS: DESARROLLO DE APLICACIONES WEB.

PROGRAMACION
2014/2015.

9.39

También podría gustarte