Sie sind auf Seite 1von 10

Base de Datos II

TP Final
FACULTAD DE INGENIERIA.
Profesor Adjunto: Lic. Gabriel Ingravallo.
J efe Trabajos Prcticos: Lic. Cristian Parise.
Alumno: Mura, Gastn.
2
Implementar las siguientes clases en Java
Juez: propiedades: Nombre, matricula profesional, trayectoria (texto).
Juzgado: propiedades: Fuero (civil, comercial, laboral, penal), Juez
(instancia), domicilio, localidad.
Persona: nombre, apellido, dni, sexo, fecha nacimiento.
Causa: propiedades: Juzgado, Nro. Expediente, imputados (conjunto de
Persona), testigos (conjunto de Persona), sentencia (texto, nulo si no tiene
todava).
Para poder realizar el prctico, implementamos las clases anteriormente
descriptas, adems de otras clases:
cargarDatos.java: Esta clase la utilizamos para insertar todos los datos
necesarios para poder probar la aplicacin desarrollada.
Causa.java: Clase que describe las causas con los atributos indicados en el
punto 1.
CausaSentencia.java: Clase que hace uso de la interfase Evaluation la
cual me obliga a implementar el mtodo Evaluate, que lo utilizamos en las
consultas SODA para poder realizara las comparaciones que la consulta nos
pide.
Juez.java Clase que describe a los jueces con los atributos indicados en el
punto 1.
Juzgado.java Clase que describe los juzgados con los atributos indicados
en el punto 1.
Persona.java Clase que describe a las personas con los atributos indicados
en el punto 1.
test.java Esta es la clase que ejecuta las consultas, es el punto de entrada
de la aplicacin.
3
Crear una aplicacin Java que genere mltiples instancias de cada
una, y utilizando el entorno eclipse, les d persistencia en el motor
de bases de datos Orientado a objetos: DB4O.
Creamos la clase cargarDatos la cual tiene un mtodo esttico cargar()
que inserta toda la informacin necesaria en la base para poder probar las
consultas.
Datos cargados en la Base de Datos:
4
5
Hacer las siguientes consultas con QueryByExample:
1) Mostrar las causas con sentencia que tengan ms de 2
imputados, se deber mostrar los datos de la causa y los datos de
sus imputados.
2) Mostrar los juzgados del fuero civil que tengan al menos una
causa con sentencia y una causa sin sentencia.
Resolver tambin las dos consultas utilizando Native Queries y
SODA (una con cada mtodo).
1)
QBE
public static void consul t aQBE( Obj ect Cont ai ner cont ai ner ) {
Causa ej Causa = new Causa( ) ;
Obj ect Set <Causa> causas = cont ai ner . quer yByExampl e( ej Causa) ;
Li st <Causa> causas2 = new Ar r ayLi st <Causa>( ) ;
for ( Causa c : causas) {
if( c. get Sent enci a( ) ! = null && c. get I mput ados( ) . si ze( ) > 2) {
causas2. add( c) ;
}
}
Causa. formatoConsulta( causas2, " QBE ( Quer y By Exampl e ) " ) ;
}
Como QBE (Query By Example) es muy limitado para poder hacer consultas
un tanto complejas, lo que hicimos fue seleccionar todas las causas y
mediante programacin filtramos las que cumplan con la condicin que la
consulta peda.
NQ
public static void consul t aNQ( Obj ect Cont ai ner cont ai ner ) {
@Suppr essWar ni ngs( " ser i al " )
Li st <Causa> causas = cont ai ner . quer y( new Pr edi cat e<Causa>( ) {
public boolean mat ch( Causa c) {
return ( c. get I mput ados( ) . si ze( ) > 2 && c. get Sent enci a( ) ! = null) ;
}
}) ;
Causa. formatoConsulta( causas, " NQ ( Nat i ve Quer y ) " ) ;
}
Con NQ (Native Quero) fue diferente, ya que el mismo lenguaje de
consultas te permite crear predicados para ver si coinciden las tuplas que se
observan con las condiciones de bsqueda que pide la consulta.
6
SODA
public static void consul t aSODA( Obj ect Cont ai ner cont ai ner ) {
Quer y quer y = cont ai ner . quer y( ) ;
quer y. const r ai n( Causa. class) ;
quer y. const r ai n( new CausaSent enci a( ) ) ;
Li st <Causa> causas3 = quer y. execut e( ) ;
Causa. formatoConsulta( causas3, " S. O. D. A" ) ;
}
Con SODA tuvimos que hacer uso de una interfase que te brinda el mismo
lenguaje de consultas, para poder poner las condiciones de bsqueda que
peda la consulta.
Creamos una clase llamada CausaSentecia.java, esta clase extiende de la
interfase Evaluation, la cual nos brinda tres mtodos:
Evaluate(Candidate candidate), metodo que nos obliga a definir la
interfaz, en donde recibiremos un Candidate, el cual es un objeto que
vamos a evaluar con las condiciones impuestas por la consulta, para
saber si a ese candidate, lo incluimos o no en el resultado de la consulta.
GetObject(), con este mtodo podemos obtener, casteando al candidate
al tipo indicado, el objeto que queremos evaluar.
Include(), este mtodo, indica si al objeto lo incluimos o no en el
resultado de la consulta, si al evaluar al objeto las condiciones son
ciertas, le asignamos true a incluye, y el objeto ya se agrega al resultado
de la consulta.
import com. db4o. quer y. Candi dat e;
import com. db4o. quer y. Eval uat i on;
public class CausaSent enci a implements Eval uat i on{
private static final long serialVersionUID = 1L;
public void eval uat e( Candi dat e causa) {
Causa causasI mput ados = ( Causa) causa. get Obj ect ( ) ;
causa. i ncl ude( ( causasI mput ados. get I mput ados( ) . si ze( ) > 2
&& causasI mput ados. get Sent enci a( ) ! = null ) ) ;
}
}
Para hacer uso de esta clase desde SODA:
quer y. const r ai n( new CausaSent enci a( ) ) ;
7
Otra manera de resolver la consulta:
Quer y q= cont ai ner . quer y( ) ;
q. const r ai n( Causa. class) ;
Const r ai nt const r =q. descend( " sent enci a" ) . const r ai n( null) . not ( ) ;
q. descend( " i mput ados" ) . descend( " si ze" ) . const r ai n( 2) . gr eat er ( ) . and( cons
t r ) ;
Obj ect Set <Causa> r esul t =q. execut e( ) ;
Causa. f or mat oConsul t a( r esul t , " S. O. D. A" ) ;
De esta manera hacemos uso de los mtodos que nos brinda SODA para
resolver consultas.
Resultado de las consultas en los tres modos (QBE, NQ, SODA).
8
2) Mostrar los juzgados del fuero civil que tengan al menos una
causa con sentencia y una causa sin sentencia
QBE
public static void consul t aDosQBE( Obj ect Cont ai ner cont ai ner ) {
Causa ej Causa = new Causa( ) ;
J uzgado j uz = new J uzgado( ) ;
j uz. set Fuer o( J uzgado. Fuer o. CIVIL) ;
ej Causa. set J uzgado( j uz) ;
final Obj ect Set <Causa> causas = cont ai ner . quer yByExampl e( ej Causa) ;
Li st <J uzgado> causasCS = new Ar r ayLi st <J uzgado>( ) ;
Li st <J uzgado> causasSS = new Ar r ayLi st <J uzgado>( ) ;
for ( Causa c : causas) {
if( c. get Sent enci a( ) ! = null ) {
if( ! causasCS. cont ai ns( c. get J uzgado( ) ) )
causasCS. add( c. get J uzgado( ) ) ;
}else{
if( ! causasSS. cont ai ns( c. get J uzgado( ) ) )
causasSS. add( c. get J uzgado( ) ) ;
}
}
causasCS. r et ai nAl l ( causasSS) ;
Causa. formatoConsultaDos( causasCS, " QBE ( Quer y By Exampl e ) " ) ;
}
En la consulta en QBE, lo primero que hacemos es seleccionar las causas
que tengan juzgado con fuero CIVIL, luego mediante programacin
separamos los juzgado en los que tiene causas con sentencia (los guardo en
una lista, causasCS) y los juzgados que tienen causas sin sentencia (los
guardo en otra lista, causasSS). Una ves que tenemos las dos listas con
juzgados, realizamos la interseccin de las dos listas, con lo que obtenemos
los juzgados que tienen al menos una causa con sentencia y una sin
sentencia.
La consulta la tenemos que realizar de esta manera por que QBE no nos da
herramientas como para poder hacerlo solamente haciendo uso de su
lenguaje de consultas.
La forma de resolver la consulta en NQ (Native Query) y SODA, es
exactamente la misma, mediante consulta traemos de la Base las causas, y
mediante programacin obtenemos dos listas con los juzgados con causas
con o sin sentencia, luego hacemos una interseccin entre las listas para
quedarnos con los juzgados que estn en ambas.
9
NQ
public static void consul t aDosNQ( Obj ect Cont ai ner cont ai ner ) {
@Suppr essWar ni ngs( " ser i al " )
Li st <Causa> causasCS = cont ai ner . quer y( new Pr edi cat e<Causa>( ) {
public boolean mat ch( Causa c) {
return ( c. get J uzgado( ) . get Fuer o( ) == J uzgado. Fuer o. CIVIL &&
c. get Sent enci a( ) ! = null ) ;
}
}) ;
@Suppr essWar ni ngs( " ser i al " )
Li st <Causa> causasSS = cont ai ner . quer y( new Pr edi cat e<Causa>( ) {
public boolean mat ch( Causa c) {
return ( c. get J uzgado( ) . get Fuer o( ) == J uzgado. Fuer o. CIVIL &&
c. get Sent enci a( ) == null ) ;
}
}) ;
Li st <J uzgado> j uzCausasCS = new Ar r ayLi st <J uzgado>( ) ;
for ( Causa c : causasCS ) {
if( ! j uzCausasCS. cont ai ns( c. get J uzgado( ) ) )
j uzCausasCS. add( c. get J uzgado( ) ) ;
}
Li st <J uzgado> j uzCausasSS = new Ar r ayLi st <J uzgado>( ) ;
for ( Causa c : causasSS ) {
if( ! j uzCausasSS. cont ai ns( c. get J uzgado( ) ) )
j uzCausasSS. add( c. get J uzgado( ) ) ;
}
j uzCausasCS. r et ai nAl l ( j uzCausasSS) ;
Causa. formatoConsultaDos( j uzCausasCS, " NQ ( Nat i ve Quer y ) " ) ;
}
10
SODA
public static void consul t aDosSODA( Obj ect Cont ai ner cont ai ner ) {
Quer y quer y = cont ai ner . quer y( ) ;
quer y. const r ai n( Causa. class) ;
quer y. descend( " j uzgado" ) . descend( " f uer o" ) . const r ai n( J uzgado. Fuer o. CIVI
L) . and( quer y. descend( " sent enci a" ) . const r ai n( null) . not ( ) ) ;
Li st <Causa> causasCS = quer y. execut e( ) ;
Quer y quer y2 = cont ai ner . quer y( ) ;
quer y2. const r ai n( Causa. class) ;
quer y2. descend( " j uzgado" ) . descend( " f uer o" ) . const r ai n( J uzgado. Fuer o. CIV
IL) . and( quer y2. descend( " sent enci a" ) . const r ai n( null) ) ;
Li st <Causa> causasSS = quer y2. execut e( ) ;
Li st <J uzgado> j uzCausasCS = new Ar r ayLi st <J uzgado>( ) ;
for ( Causa c : causasCS ) {
if( ! j uzCausasCS. cont ai ns( c. get J uzgado( ) ) )
j uzCausasCS. add( c. get J uzgado( ) ) ;
}
Li st <J uzgado> j uzCausasSS = new Ar r ayLi st <J uzgado>( ) ;
for ( Causa c : causasSS ) {
if( ! j uzCausasSS. cont ai ns( c. get J uzgado( ) ) )
j uzCausasSS. add( c. get J uzgado( ) ) ;
}
j uzCausasCS. r et ai nAl l ( j uzCausasSS) ;
Causa. formatoConsultaDos( j uzCausasCS, " S. O. D. A" ) ;
}
Resultados de la consulta en los tres modos (QBE, NQ, SODA).

Das könnte Ihnen auch gefallen