Vous êtes sur la page 1sur 36

ITSON Manuel Domitsu Kono

Tema 15
Aplicaciones de Dos Capas
Una aplicacin de dos capas es una en la cual el cdigo est separado del sistema de
administracin de la base de datos. Esas capas pueden estar separadas lgicamente,
es decir cada una ejecuta en un proceso diferente en la misma computadora, o
separadas fsicamente, es decir cada una ejecuta en procesos diferentes en
computadoras diferentes.

Una aplicacin de dos capas, realmente tiene tres partes: un cliente, un servidor y un
protocolo. El protocolo es el puente entre las capas del cliente y el servidor. En la capa
del cliente reside la interfaz del usuario y la lgica del negocio, mientras que en el
servidor est un administrador de bases de datos.

El protocolo en una aplicacin de dos capas comunica una capa con la otra, que en
ocasiones pueden residir en dos computadoras diferentes. El cliente le hace solicitudes
al servidor y el servidor le regresa al cliente los resultados de esas solicitudes.

En J ava, ese protocolo toma la forma de una API para facilitarnos la construccin de
aplicaciones cliente servidor. Los mtodos de las clases de esta API establecen un
mecanismo estndar para que un cliente escrito en J ava se comunique con
administradores de bases de datos de diferentes fabricantes. Esta API llamada J DBC
se encuentran en los paquetes:

java.sql
javax.sql

Adicionalmente a la API, se requiere para cada base de datos, un manejador J DBC, el
cual es un componente que permite la comunicacin entre la API y un administrador de
bases de datos. Este manejador, normalmente no los proporciona el fabricante del
administrador de base de datos.

En la figura 15.1 se muestra un diagrama de clases parcial de las interfaces y clases
que forman parte de la API java:

j ava. sql . Dr i ver : Esta interfaz declara los mtodos que toda clase que
implementa un manejador J DBC debe tener. Normalmente los manejadores son
proporcionados por los fabricantes de administradores de bases de datos.

590 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono

Figura 15.1. Diagrama de clases parcial de la API JDBC de Java

j ava. sql . Dr i ver Manager : Es la clase que permite la administracin de los
manejadores J DBC. Dr i veManager cargar a memoria el manejador J DBC de
cada base de datos a la que nuestro programa desea comunicarse. Para cargar
un manejador J DBC a memoria, Dr i veManager crea una instancia de la clase
que implementa al manejador. Sin embargo en lugar de utilizar el operador new
para crear la instancia de la clase, Dr i veManager utliza un mecanismo que
permite especificar el nombre de la clase en tiempo de ejecucin en lugar de en
tiempo de compilacin. Este mecanismo permite crear una instancia de una
clase dado el nombre de la clase y utiliza la siguiente sintaxis:

Class.forName("nombreManejadorJDBC").newInstance();

Donde nombreManejadorJDBC es el nombre de del manejador J DBC.

Una vez que se ha cargado el manejador J DBC en memoria necesitamos
establecer una conexin entre la API J DBC y el administrador de la base de
datos. Para ello invocamos al mtodo esttico get Connect i on( ) de
Dr i veManager , cuya sintaxis se muestra en la tabla 15.1:

j ava. sql . Connect i on: Esta interfaz declara los mtodos que debe tener una
clase que represente una conexin lgica entre la API J DBC y la base de datos.
Esta conexin nos permiten enviarle al manejador de la base de datos
sentencias SQL y recuperar las repuestas del manejador de bases de datos.
Estas sentencias se encapsulas en objetos que implementan la interfaz
j ava. sql . St at ement . Para crear una sentencia SQL Connection tiene un
mtodo llamado createStatement cuya sintaxis se muestra en la tabla 15.2:





Tema 15 Aplicaciones de dos Capas 591
ITSON Manuel Domitsu Kono
Tabla 15.1. Mtodo getConnection() de la clase DriveManager
public static Connection getConnection(String url, String user,
String password) throws SQLException

Establece la conexin con la base de datos.

Parmetros:
url. URL de la base de datos. La sintaxis de url es:

" jdbc: subprotocolo: / / dirIP_Servidor/ nomBaseDatos"

donde
subpr ot ocol o identifica al vendedor del manejador de base de datos.
dirIP_Servidor es la direccin IP del servidor. Si la base de datos se
encuentra en la misma computadora que contiene al cliente, podemos utilizar la
palabra localhost en lugar de la direccin IP.
nomBaseDatos es el nombre de la base de datos.

user. Es el nombre de un usuario con acceso a la base de datos.

password. Es la contrasea del usuario con acceso a la base de datos.

Regresa:
Un objeto del tipo Connect i on, la conexin a la base de datos..

Lanza:
SQLExcept i on Si no se puede establecer la conexin con la base datos.

Tabla 15.2. Mtodos de la interfaz Connection
public void close() t hr ows SQLExcept i on

Cierra la conexin con la base de datos y libera los recursos asignados a esta conexin.

Lanza:
SQLExcept i on Si hay un problema al acceder a la base datos.
publ i c St at ement cr eat eSt at ement ( ) t hr ows SQLExcept i on

Crea un objeto del tipo St at ement para enviar sentencias SQL a la base de datos.

Regresa:
Un objeto del tipo St at ement .

Lanza:
SQLExcept i on Si no se puede establecer la conexin con la base datos.

j ava. sql . St at ement : Esta interfaz declara los mtodos que debe tener una
clase que represente el mecanismo que nos permita enviarle al manejador de la
base de datos sentencias SQL y recuperar las repuestas del manejador de
bases de datos. Los mtodos de esta interfaz se muestran en la tabla 15.3:



592 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
Tabla 15.3. Mtodos de la interfaz Statement
public void close() t hr ows SQLExcept i on

Cierra la sentencia y libera los recursos asignados a esta sentencia. Si hay un objeto del tipo
ResultSet asociado a esta sentencia tambin se cierra.

Lanza:
SQLExcept i on Si hay un problema al acceder a la base datos.
public ResultSet executeQuery(String sql) throws SQLException

Ejecuta la sentencia SQL dada por el parmetro, la cual regresa un solo objeto con la respuesta
a la sentencia.

Parmetro:
sql Sentencia SQL a enviarse al manejador de base de datos. Normalmente una sentencia
sel ect .

Regresa:
Un objeto del tipo Resul t Set con los datos producidos por la consulta, nunca nul l .

Lanza:
SQLExcept i on Si no se puede acceder a la base datos o se produce cualquier respuesta
que no sea del tipo Resul t Set .
public i nt execut eUpdat e( St r i ng sql) throws SQLException

Ejecuta la sentencia SQL dada por el parmetro, la cual puede ser una sentencia i nser t ,
updat e, del et e. Tambin pueden ser sentencias cr eat e t abl e, al t er t abl e y dr op
t abl e, entre otras.

Parmetro:
sql Sentencia i nser t , updat e, del et e a enviarse al manejador de base de datos.
Tambin puede ser una sentencia que no regrese nada.

Regresa:
Nmero de renglones modificados por la sentencia o 0 si la sentencia no regresa nada.

Lanza:
SQLExcept i on Si no se puede acceder a la base datos o se produce cualquier respuesta
que sea del tipo Resul t Set .

j ava. sql . Resul t Set : Esta interfaz declara los mtodos que debe tener una
clase que represente una tabla de datos producida por una consulta a la base de
datos. Un objeto de esta clase mantiene un cursor apuntando al rengln actual
de la tabla. Inicialmente, el cursor est posicionado antes del primer rengln.
Para obtener el siguiente rengln de la tabla se invoca al mtodo next ( ) . La
interfaz declara mtodos que permiten recuperar el valor de una columna de un
rengln de la tabla. Los mtodos de esta interfaz se muestran en la tabla 15.4:





Tema 15 Aplicaciones de dos Capas 593
ITSON Manuel Domitsu Kono
Tabla 15.4. Mtodos de la interfaz ResultSet
public void close() t hr ows SQLExcept i on

Cierra el objeto Resul t Set y libera los recursos asignados a este objeto. Un objeto del tipo
Resul t Set tambin se cierra cuando su sentencia asociada se cierra.

Lanza:
SQLExcept i on Si hay un problema al acceder a la base datos.
public boolean getBoolean(int columnIndex) throws SQLException
public boolean getBoolean(String columnName) throws SQLException
public byte getByte(int columnIndex) throws SQLException
public byte getByte(String columnName) throws SQLException
public short getShort(int columnIndex) throws SQLException
public short getShort(String columnName) throws SQLException
public int getInt(int columnIndex) throws SQLException
public int getInt(String columnName) throws SQLException
public long getLong(int columnIndex) throws SQLException
public long getLong(String columnName) throws SQLException
public float getFloat(int columnIndex) throws SQLException
public float getFloat(String columnName) throws SQLException
public double getDouble(int columnIndex) throws SQLException
public double getDouble(String columnName) throws SQLException
public String getString(int columnIndex) throws SQLException
public String getString(String columnName) throws SQLException
public Date getDate(int columnIndex) throws SQLException
public Date getDate(String columnName) throws SQLException

Obtiene el valor de la columna dada por el parmetro, en el rengln actual del objeto de tipo
Resul t Set como un valor del tipo regresado por el mtodo.

Parmetro:
columnIndex Nmero de la columna. La primera columna tiene el valor de 1, la segunda el
valor de 2, etc.
columnName Nombre SQL de la columna.

Regresa:
El valor de la columna como un valor del tipo regresado por el mtodo. Si el valor SQL es NULL
regresa f al se, 0, o nul l .

Lanza:
SQLExcept i on Si no se puede acceder a la base.
Public Boolean next()throws SQLException

Mueve el cursor al siguiente rengln de la tabla del objeto de tipo Resul t Set . Inicialmente, el
cursor se encuentra antes del primer rengln de la tabla por lo que la primera llamada a este
mtodo posiciona el cursor en el primer rengln de la tabla.

Regresa:
Si el cursor se mueve despus del ltimo rengln de la tabla, el mtodo regresa falso, verdadero
en caso contrario.

Lanza:
SQLExcept i on Si no se puede acceder a la base.

594 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
Para encapsular la funcionalidad de las clases e interfaces de la API J DBC anteriores
crearemos dos clases: Conexi n y Tabl a que proveen mtodos para crear una
conexin con la base de datos y ejecutar sentencias SQL. Tambin el acceso a cada
tabla de una base de datos ser encapsulada mediante una clase que permitir
obtener, agregar, actualizar, eliminar y consultar renglones a esa tabla. Esas clases se
implementarn como subclases de la clase Tabl a. El diagrama de estas clases en el
programa Amante Msica se muestra en la figura 15.2:

Figura 15.2

El constructor de la clase Conexi n nos permite conectarnos con la base de datos. El
mtodo get Conexi on( ) nos regresa esa conexin, mientras que el mtodo cl ose( )
Termina la conexin con la base de datos. El cdigo de la clase Conexi n es el
siguiente:

Conexion.java
/ *
* Conexi on. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package per si st enci a;

i mpor t j ava. net . *;
Tema 15 Aplicaciones de dos Capas 595
ITSON Manuel Domitsu Kono
i mpor t j ava. sql . *;
i mpor t excepci ones. Per si st enci aExcept i on;

/ **
* Est a cl ase est abl ece una conexi n con una base de dat os mySQL.
*
* @aut hor mdomi t su
*/
publ i c cl ass Conexi on {

/ / Conect or a l a base de dat os.
pr i vat e Connect i on conexi on;

/ **
* Est abl ece una conexi n con l a base de dat os.
* @par amur l URL de l a base de dat os
* @par amusuar i o Cuent a de usuar i o
* @par ampasswor d Cont r asea del usuar i o
* @t hr ows j ava. l ang. Except i on Si no puede est abl ecer l a conexi n con l a
* base de dat os
*/
publ i c Conexi on( St r i ng ur l , St r i ng usuar i o, St r i ng passwor d)
t hr ows Per si st enci aExcept i on {
t r y {
/ / Se cr ea una i nst anci a de l a cl ase manej ador a de mySQL
Cl ass. f or Name( " or g. gj t . mm. mysql . Dr i ver " ) . newI nst ance( ) ;

/ / Se conect a con l a base de dat os
conexi on = Dr i ver Manager . get Connect i on( ur l , usuar i o, passwor d) ;
}
cat ch( Except i on e) {
t hr ow new
Per si st enci aExcept i on( " Er r or al conect ar se a l a base de dat os" , e) ;
}
}

/ **
* Obt i ene l a conexi n con l a base de dat os.
* @r et ur n La conexi n con l a base de dat os
*/
publ i c Connect i on get Conexi on( ) {
r et ur n conexi on;
}

publ i c voi d cl ose( ) t hr ows Per si st enci aExcept i on {
t r y {
conexi on. cl ose( ) ;
}
cat ch( Except i on e) {
t hr ow new
Per si st enci aExcept i on( " Er r or al cer r ar l a conexi n con l a base de dat os" , e) ;
}
}
}

La clase siguiente nos proporciona mtodos para ejecutar las sentencias SQL bsicas:
596 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
Tabla.java
/ *
* Tabl a. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package per si st enci a;

i mpor t j ava. net . *;
i mpor t j ava. sql . *;
i mpor t excepci ones. Per si st enci aExcept i on;

/ **
* Est a cl ase i mpl ement a l as oper aci ones de consul t ar , act ual i zar y obt ener
* el si gui ent e r engl n de una t abl a de una base de dat os SQL.
*
* @aut hor mdomi t su
*/
publ i c cl ass Tabl a {
/ / Nombr e de l a t abl a en l a que se al macenan l os dat os
pr ot ect ed St r i ng nomTabl a;
/ / Conexi n con l a base de dat os */
pr i vat e Connect i on conexi on;
/ / Sent enci a SQL que se l e envi a al manej ador de l a base de dat os par a
/ / consul t ar , i nser t ar , act ual i zar , bor r ar .
pr i vat e St at ement sent enci a;
/ / Respuest a del manej ador de l a base de dat os a l a sent enci a SQL.
pr i vat e Resul t Set r espuest a;

/ **
* Const r uct or del mt odo. Est abl ece el nombr e de l a t abl a
* en l a que se al macenan l os dat os
* @par amnomTabl a Nombr e de l a t abl a en l a que se al macenan l os dat os
*/
publ i c Tabl a( St r i ng nomTabl a) {
/ / Est abl ece el nombr e de l a t abl a
t hi s. nomTabl a = nomTabl a;
}

/ **
* Est abl ece l a conexi on con l a base de dat os
* @par amconexi on Conexi on con l a base de dat os
*/
publ i c voi d set Conexi on( Connect i on conexi on) {
t hi s. conexi on = conexi on;
}

/ **
* Est e mt odo per mi t e consul t ar una t abl a de una base de dat os mySQL.
* @par amsql Cadena con l a sent enci a con l a consul t a.
* @t hr ows SQLExcept i on Si no puede cr ear el St at ement o ej ecut ar l a
* consul t a
*/
publ i c voi d consul t a( St r i ng sql ) t hr ows Per si st enci aExcept i on {
t r y {
Tema 15 Aplicaciones de dos Capas 597
ITSON Manuel Domitsu Kono
/ / Cr ea una sent enci a par a hacer l a consul t a
sent enci a = conexi on. cr eat eSt at ement ( ) ;

/ / Ej ecut a l a consul t a. El mt odo execut eQuer y( ) r egr esa una t abl a
/ / que gener a como r esul t ado de l a consul t a
r espuest a = sent enci a. execut eQuer y( sql ) ;
}
cat ch( SQLExcept i on se) {
t hr ow new
Per si st enci aExcept i on( " No se puede consul t ar a l a base de dat os" , se) ;
}
}

/ **
* Est e mt odo obt i ene el si gui ent e r engl n de l a t abl a gener ada por l a
* consul t a hecha por el mt odo execut eSel ect ( ) .
* @r et ur n Si hay r engl ones, el si gui ent e r engl n, nul l en caso cont r ar i o.
* @t hr ows Per si st enci aExcept i on Si no puede obt ener el si gui ent e r engl on
* de l a t abl a.
*/
publ i c Resul t Set obt enRengl on( ) t hr ows Per si st enci aExcept i on {
t r y {
/ / Si hay ot r o r engl on en l a t abl a, r egr sal o.
i f ( r espuest a. next ( ) )
r et ur n r espuest a;
/ / Si no, ci er r a l a sent enci a, l a t abl a y r egr esa nul l .
el se {
/ / Ci er r a l a sent enci a y l a t abl a y r egr esa nul l .
r espuest a. cl ose( ) ;
sent enci a. cl ose( ) ;
r et ur n nul l ;
}
}
cat ch( SQLExcept i on se) {
t hr ow new
Per si st enci aExcept i on( " No se puede consul t ar a l a base de dat os" , se) ;
}
}

/ **
* Est e mt odo per mi t e modi f i car , i nser t ar y bor r ar r engl ones de una t abl a
* de una base de dat os mySQL.
* @par amsql Cadena con l a sent enci a par a modi f i car , i nser t ar o bor r ar .
* @t hr ows Per si st enci aExcept i on Si no puede cr ear el St at ement o ej ecut ar
* l a act ual i zaci n
*/
publ i c voi d act ual i za( St r i ng sql ) t hr ows Per si st enci aExcept i on {
t r y {
/ / Cr ea una sent enci a par a hacer l a modi f i caci n.
sent enci a = conexi on. cr eat eSt at ement ( ) ;

/ / Ej ecut a l a modi f i caci n.
i nt i = sent enci a. execut eUpdat e( sql ) ;

/ / Ci er r a l a sent enci a y l a t abl a.
sent enci a. cl ose( ) ;
}
598 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
cat ch( SQLExcept i on se) {
t hr ow new
Per si st enci aExcept i on( " No se puede act ual i zar a l a base de dat os" , se) ;
}
}
}

La figura 15.3 muestra el diagrama Entidad - Relacin de las tablas canciones,
pelculas y generos en la base de datos musica.


Figura 15.3

El siguiente es el listado parcial de la clase Canci ones que implementa los mtodos
que nos permiten obtener, consultar, insertar, actualizar y eliminar renglones de la tabla
canciones.

Cada rengln de la tabla canciones proviene de o se convierte en un objeto del tipo
Cancion. Los mtodos de esta clase lanzan excepciones del tipo
Per si st enci aExcept i on, la cual fue vista en el tema 6: Colecciones.

Canciones.java
/ *
* Canci ones. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package per si st enci a;

i mpor t j ava. sql . *;
i mpor t j ava. ut i l . Li st ;
i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. Per si st enci aExcept i on;

Tema 15 Aplicaciones de dos Capas 599
ITSON Manuel Domitsu Kono
/ **
* Est a cl ase per mi t e agr egar , el i mi nar y consul t ar canci ones del pr ogr ama
* Amant eMusi ca en su ver si n que usa una base de dat os
*
* @aut hor mdomi t su
*/
publ i c cl ass Canci ones ext ends Tabl a {

/ **
* Const r uct or del mt odo. Est abl ece el nombr e de l a t abl a
* en l a que se al macenan l os dat os
* @par amnomTabl a Nombr e de l a t abl a en l a que se al macenan l os dat os
*/
publ i c Canci ones( St r i ng nomTabl a) {
super ( nomTabl a) ;
}

/ **
* Est e mt odo obt i ene una canci n cuya cl ave es i gual a l a cl ave de l a
* canci n dada por el par met r o.
* @par amcanci on Obj et o de t i po Canci on con l a cl ave de l a canci n a
* buscar
* @r et ur n La Canci on si l a encuent r a. nul l en caso cont r ar i o.
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Canci on obt en( Canci on canci on) t hr ows Per si st enci aExcept i on {
Resul t Set r engl on;

/ / Cr ea l a sent enci a SQL par a buscar l a canci on en l a t abl a canci ones.
St r i ng sql = " SELECT * FROM " + nomTabl a +
" WHERE cl ave = ' " + canci on. get Cl ave( ) + " ' ; " ;

/ / Ej ecut a l a consul t a
consul t a( sql ) ;

/ / Si hay un r engl n en l a t abl a con l a canci on buscada
i f ( ( r engl on = obt enRengl on( ) ) ! = nul l ) {
t r y {
/ / Cr ea un obj et o del t i po Canci on con l os campos del r engl on de l a
/ / t abl a.
Canci on canci onHayada = new Canci on( r engl on. get St r i ng( " cl ave" ) ,
r engl on. get St r i ng( " t i t ul o" ) ,
new Gener o( r engl on
. get St r i ng( " cveGener o" ) ) ,
r engl on. get St r i ng( " i nt er pr et e" ) ,
r engl on. get St r i ng( " aut or " ) ,
r engl on. get St r i ng( " al bum" ) ,
r engl on. get I nt ( " dur aci on" ) ,
new Fecha( r engl on
. get Dat e( " f echa" ) ) ) ;
r et ur n canci onHayada;
}
cat ch ( SQLExcept i on sql e) {
t hr ow new
Per si st enci aExcept i on( " Er r or al acceder a l a base de dat os" , sql e) ;
}
}
600 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
/ / Si no, r egr esa nul l
r et ur n nul l ;
}

/ **
* Est e mt odo per mi t e i nser t ar un r engl n de l a t abl a con l os at r i but os de
* l os obj et os de l a cl ase Canci on.
* @par amcanci on Canci on a i nser t ar en l a t abl a canci oness
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d agr ega( Canci on canci on) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a par a i nser t ar .
/ / La sent enci a debe t er mi nar en un ;
sql += " I NSERT " + nomTabl a;
sql += " SET cl ave = ' " + canci on. get Cl ave( ) + " ' " ;
sql += " , t i t ul o = ' " + canci on. get Ti t ul o( ) + " ' " ;
sql += " , cveGener o = ' " + canci on. get Gener o( ) . get CveGener o( ) + " ' " ;
sql += " , i nt er pr et e = ' " + canci on. get I nt er pr et e( ) + " ' " ;
sql += " , aut or Let r a = ' " + canci on. get Aut or ( ) + " ' " ;
sql += " , al bum= ' " + canci on. get Al bum( ) + " ' " ;
sql += " , dur aci on = ' " + canci on. get Dur aci on( ) + " ' " ;
sql += " , f echa = \ " " + canci on. get Fecha( ) . t oDat eSt r i ng( ) + " \ " ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e modi f i car un r engl n de l a t abl a con l os at r i but os
* de l os obj et os de l a cl ase Canci on.
* @par amcanci on El usuar i o a modi f i car
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d act ual i za( Canci on canci on) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a con l a act ual i zaci n.
/ / La sent enci a debe t er mi nar en un ;
sql += " UPDATE " + nomTabl a;
sql += " SET cl ave = ' " + canci on. get Cl ave( ) + " ' " ;
sql += " , t i t ul o = ' " + canci on. get Ti t ul o( ) + " ' " ;
sql += " , cveGener o = ' " + canci on. get Gener o( ) . get CveGener o( ) + " ' " ;
sql += " , i nt er pr et e = ' " + canci on. get I nt er pr et e( ) + " ' " ;
sql += " , aut or Let r a = ' " + canci on. get Aut or ( ) + " ' " ;
sql += " , al bum= ' " + canci on. get Al bum( ) + " ' " ;
sql += " , dur aci on = ' " + canci on. get Dur aci on( ) + " ' " ;
sql += " , f echa = \ " " + canci on. get Fecha( ) . t oDat eSt r i ng( ) + " \ " " ;
sql += " WHERE cl ave = ' " + canci on. get Cl ave( ) + " ' ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e bor r ar un r engl n de l a t abl a con l os at r i but os de
Tema 15 Aplicaciones de dos Capas 601
ITSON Manuel Domitsu Kono
* l os obj et os de l a cl ase Canci on.
* @par amcanci on Canci on a bor r ar
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d el i mi na( Canci on canci on) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a par a bor r ar .
/ / La sent enci a debe t er mi nar en un ;
sql += " DELETE FROM " + nomTabl a;
sql += " WHERE cl ave = ' " + canci on. get Cl ave( ) + " ' ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Canci on usando el comando de consul t a dado por el par met r o.
* @par amsql Comando de consul t a dado por el par met r o.
* @r et ur n Una l i st a de l os obj et os del t i po Canci on de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Canci on> l i st a( St r i ng sql ) t hr ows Per si st enci aExcept i on {
Resul t Set r engl on;
Li st <Canci on> l i st a = new Ar r ayLi st <Canci on>( ) ;

/ / Ej ecut a l a consul t a
consul t a( sql ) ;

/ / Mi ent r as haya canci ones en l a t abl a
whi l e ( ( r engl on = obt enRengl on( ) ) ! = nul l ) {
t r y {
/ / Cr ea un obj et o del t i po Canci on con l os campos del r engl on de l a
/ / t abl a.
Canci on canci on = new Canci on( r engl on. get St r i ng( " cl ave" ) ,
r engl on. get St r i ng( " t i t ul o" ) ,
new Gener o( r engl on
. get St r i ng( " cveGener o" ) ) ,
r engl on. get St r i ng( " i nt er pr et e" ) ,
r engl on. get St r i ng( " aut or " ) ,
r engl on. get St r i ng( " al bum" ) ,
r engl on. get I nt ( " dur aci on" ) ,
new Fecha( r engl on. get Dat e( " f echa" ) ) ) ;

/ / Agr ega l a pel cul a al vect or de pel cul a
l i st a. add( canci on) ;
}
cat ch ( SQLExcept i on sql e) {
t hr ow
new Per si st enci aExcept i on( " Er r or al acceder a l a base de dat os" ,
sql e) ;
}
}
r et ur n l i st a;
}

602 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Canci on.
* @r et ur n Una l i st a de l os obj et os del t i po Canci on de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Canci on> l i st a( ) t hr ows Per si st enci aExcept i on {
St r i ng sql = " SELECT * FROM " + nomTabl a + " ; " ;

r et ur n l i st a( sql ) ;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Canci on y que t i enen el mi smo t t ul o.
* @par amt i t ul o T t ul o de l a canci n a buscar
* @r et ur n Una l i st a de l os obj et os del t i po Canci on de l a t abl a.
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Canci on> l i st aTi t ul o( St r i ng t i t ul o)
t hr ows Per si st enci aExcept i on {
St r i ng sql = " SELECT * FROM " + nomTabl a + " WHERE t i t ul o = ' " + t i t ul o
+ " ' " ;

r et ur n l i st a( sql ) ;
}

. . .

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Canci on y que t i enen el mi smo gener o.
* @par amcveGener o Cl ave del gner o de l a canci n a buscar
* @r et ur n Una l i st a de l os obj et os del t i po Canci on de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Canci on> l i st aGener o( St r i ng cveGener o)
t hr ows Per si st enci aExcept i on {
St r i ng sql = " SELECT * FROM " + nomTabl a + " WHERE cveGener o = ' "
+ cveGener o + " ' " ;

r et ur n l i st a( sql ) ;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Canci on y que t i enen el mi smo per i odo.
* @par amper i odo Per i odo de l a canci n a buscar
* @r et ur n Una l i st a de l os obj et os del t i po Canci on de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Canci on> l i st aPer i odo( Per i odo per i odo)
t hr ows Per si st enci aExcept i on {
St r i ng desde = per i odo. get Desde( ) . t oDat eSt r i ng( ) ;
St r i ng hast a = per i odo. get Hast a( ) . t oDat eSt r i ng( ) ;

St r i ng sql = " SELECT * FROM " + nomTabl a + " WHERE f echa BETWEEN \ " " +
Tema 15 Aplicaciones de dos Capas 603
ITSON Manuel Domitsu Kono
desde + " \ " AND \ " " + hast a + " \ " ; " ;

r et ur n l i st a( sql ) ;
}
}

El siguiente es el listado parcial de la clase Pel i cul as que implementa los mtodos
que nos permiten obtener, consultar, insertar, actualizar y eliminar renglones de la tabla
peliculas.
Cada rengln de la tabla peliculas proviene de o se convierte en un objeto del tipo
Pel i cul a. Los mtodos de esta clase lanzan excepciones del tipo
Per si st enci aExcept i on, la cual fue vista en el tema 6: Colecciones.

Peliculas.java
/ *
* Pel i cul as. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package per si st enci a;

i mpor t j ava. sql . *;
i mpor t j ava. ut i l . Li st ;
i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. Per si st enci aExcept i on;

/ **
* Est a cl ase per mi t e agr egar , el i mi nar y consul t ar pel cul as del pr ogr ama
* Amant eMusi ca en su ver si n que usa una base de dat os
*
* @aut hor mdomi t su
*/
publ i c cl ass Pel i cul as ext ends Tabl a {

/ **
* Const r uct or del mt odo. Est abl ece el nombr e de l a t abl a
* en l a que se al macenan l os dat os
* @par amnomTabl a Nombr e de l a t abl a en l a que se al macenan l os dat os
*/
publ i c Pel i cul as( St r i ng nomTabl a) {
super ( nomTabl a) ;
}

/ **
* Est e mt odo obt i ene una pel cul a cuya cl ave es i gual a l a cl ave de l a
* pel cul a dada por el par met r o.
* @par ampel i cul a Obj et o de t i po Pel i cul a con l a cl ave de l a pel cul a a
* buscar
* @r et ur n La Pel cul a si l a encuent r a, nul l en caso cont r ar i o
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
604 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on {
Resul t Set r engl on;

/ / Cr ea l a sent enci a SQL par a buscar una pel i cul a en l a t abl a pel i cul as.
St r i ng sql = " SELECT * FROM " + nomTabl a +
" WHERE cl ave = ' " + pel i cul a. get Cl ave( ) + " ' ; " ;

/ / Ej ecut a l a consul t a
consul t a( sql ) ;

/ / Si hay un r engl n en l a t abl a con el t i t ul o deseado
i f ( ( r engl on = obt enRengl on( ) ) ! = nul l ) {
t r y {
/ / Cr ea un obj et o del t i po Pel i cul a con l os campos del r engl n de l a
/ / t abl a.
Pel i cul a pel i cul aHal l ada = new Pel i cul a( r engl on. get St r i ng( " cl ave" ) ,
r engl on. get St r i ng( " t i t ul o" ) ,
new Gener o( r engl on
. get St r i ng( " cveGener o" ) ) ,
r engl on. get St r i ng( " act or 1" ) ,
r engl on. get St r i ng( " act or 2" ) ,
r engl on
. get St r i ng( " di r ect or " ) ,
r engl on. get I nt ( " dur aci on" ) ,
new Fecha( r engl n
. get Dat e( " f echa" ) ) ) ;
r et ur n pel i cul aHal l ada;
}
cat ch( SQLExcept i on sql e) {
t hr ow new
Per si st enci aExcept i on( " Er r or al acceder a l a base de dat os" , sql e) ;
}
}
/ / Si no, r egr esa nul l
r et ur n nul l ;
}

/ **
* Est e mt odo per mi t e i nser t ar un r engl n de l a t abl a con l os at r i but os de
* l os obj et os de l a cl ase Pel i cul a.
* @par ampel i cul a Pel i cul a a i nser t ar en l a t abl a pel i cul as
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d agr ega( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a par a i nser t ar .
/ / La sent enci a debe t er mi nar en un ;
sql += " I NSERT " + nomTabl a;
sql += " SET cl ave = ' " + pel i cul a. get Cl ave( ) + " ' " ;
sql += " , t i t ul o = ' " + pel i cul a. get Ti t ul o( ) + " ' " ;
sql += " , cveGener o = ' " + pel i cul a. get Gener o( ) . get CveGener o( ) + " ' " ;
sql += " , act or 1 = ' " + pel i cul a. get Act or 1( ) + " ' " ;
sql += " , act or 2 = ' " + pel i cul a. get Act or 2( ) + " ' " ;
sql += " , di r ect or = ' " + pel i cul a. get Di r ect or ( ) + " ' " ;
sql += " , dur aci on = ' " + pel i cul a. get Dur aci on( ) + " ' " ;
sql += " , f echa = \ " " + pel i cul a. get Fecha( ) . t oDat eSt r i ng( ) + " \ " ; " ;
Tema 15 Aplicaciones de dos Capas 605
ITSON Manuel Domitsu Kono

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e modi f i car un r engl n de l a t abl a con l os at r i but os
* de l os obj et os de l a cl ase Pel i cul a.
* @par ampel i cul a El usuar i o a modi f i car
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d act ual i za( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a con l a act ual i zaci n.
/ / La sent enci a debe t er mi nar en un ;
sql += " UPDATE " + nomTabl a;
sql += " SET cl ave = ' " + pel i cul a. get Cl ave( ) + " ' " ;
sql += " , t i t ul o = ' " + pel i cul a. get Ti t ul o( ) + " ' " ;
sql += " , cveGener o = ' " + pel i cul a. get Gener o( ) . get CveGener o( ) + " ' " ;
sql += " , act or 1 = ' " + pel i cul a. get Act or 1( ) + " ' " ;
sql += " , act or 2 = ' " + pel i cul a. get Act or 2( ) + " ' " ;
sql += " , di r ect or = ' " + pel i cul a. get Di r ect or ( ) + " ' " ;
sql += " , dur aci on = ' " + pel i cul a. get Dur aci on( ) + " ' " ;
sql += " , f echa = \ " " + pel i cul a. get Fecha( ) . t oDat eSt r i ng( ) + " \ " " ;
sql += " WHERE cl ave = ' " + pel i cul a. get Cl ave( ) + " ' ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e bor r ar un r engl n de l a t abl a con l os at r i but os de
* l os obj et os de l a cl ase Pel i cul a.
* @par ampel i cul a Pel cul a a bor r ar
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d el i mi na( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a par a bor r ar .
/ / La sent enci a debe t er mi nar en un ;
sql += " DELETE FROM " + nomTabl a;
sql += " WHERE cl ave = ' " + pel i cul a. get Cl ave( ) + " ' ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Pel i cul a usando el comando de consul t a dado por el
* par met r o.
* @par amsql Comando de consul t a dado por el par met r o.
* @r et ur n Una l i st a de l os obj et os del t i po Pel i cul a de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
606 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
publ i c Li st <Pel i cul a> l i st a( St r i ng sql ) t hr ows Per si st enci aExcept i on {
Resul t Set r engl on;
Li st <Pel i cul a> l i st a = new Ar r ayLi st <Pel i cul a>( ) ;

/ / Ej ecut a l a consul t a
consul t a( sql ) ;

/ / Mi ent r as haya pel cul as en l a t abl a
whi l e ( ( r engl on = obt enRengl on( ) ) ! = nul l ) {
t r y {

/ / Cr ea un obj et o del t i po Pel i cul a con l os campos del r engl n de
/ / l a t abl a.
Pel i cul a pel i cul a = new Pel i cul a( r engl on. get St r i ng( " cl ave" ) ,
r engl on. get St r i ng( " t i t ul o" ) ,
new Gener o( r engl on
. get St r i ng( " cveGener o" ) ) ,
r engl on. get St r i ng( " act or 1" ) ,
r engl on. get St r i ng( " act or 2" ) ,
r engl on. get St r i ng( " di r ect or " ) ,
r engl on. get I nt ( " dur aci on" ) ,
new Fecha( r engl n
. get Dat e( " f echa" ) ) ) ;

/ / Agr ega l a pel cul a al vect or de pel i cul as
l i st a. add( pel i cul a) ;
}
cat ch ( SQLExcept i on sql e) {
t hr ow new
Per si st enci aExcept i on( " Er r or al acceder a l a base de dat os" , sql e) ;
}
}
r et ur n l i st a;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Pel i cul a.
* @r et ur n Una l i st a de l os obj et os del t i po Pel i cul a de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Pel i cul a> l i st a( ) t hr ows Per si st enci aExcept i on {
St r i ng sql = " SELECT * FROM " + nomTabl a + " ; " ;

r et ur n l i st a( sql ) ;
}

. . .

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Pel i cul a y que t i enen el mi smo act or .
* @par amact or Act or a buscar
* @r et ur n Una l i st a de l os obj et os del t i po Pel i cul a de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Pel i cul a> l i st aAct or ( St r i ng act or )
Tema 15 Aplicaciones de dos Capas 607
ITSON Manuel Domitsu Kono
t hr ows Per si st enci aExcept i on {
St r i ng sql = " SELECT * FROM " + nomTabl a +
" WHERE act or 1 = ' " + act or + " ' OR act or 2 = ' " + act or + " ' ; " ;

r et ur n l i st a( sql ) ;
}

. . .
}

El siguiente es el listado de la clase Gener os implementa los mtodos que nos
permiten obtener, consultar, insertar, actualizar y eliminar renglones de la tabla
generos.

Cada rengln de la tabla generos proviene de o se convierte en un objeto del tipo
Gener o. Los mtodos de esta clase lanzan excepciones del tipo
Per si st enci aExcept i on, la cual fue vista en el tema 6: Colecciones.

Generos.java
/ *
* Gener os. j ava
*
* Cr eada el 28 de agost o de 2008, 10: 58 AM
*/

package per si st enci a;

i mpor t j ava. sql . *;
i mpor t j ava. ut i l . Li st ;
i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t obj et osNegoci o. Gener o;
i mpor t excepci ones. Per si st enci aExcept i on;

/ **
* Est a cl ase per mi t e agr egar , el i mi nar y consul t ar gener oes del pr ogr ama
* Amant eMusi ca en su ver si n que usa una base de dat os
*
* @aut hor mdomi t su
*/
publ i c cl ass Gener os ext ends Tabl a {
/ **
* Const r uct or del mt odo. Est abl ece el nombr e de l a t abl a
* en l a que se al macenan l os dat os
* @par amnomTabl a Nombr e de l a t abl a en l a que se al macenan l os dat os
*/
publ i c Gener os( St r i ng nomTabl a) {
super ( nomTabl a) ;
}

/ **
* Est e mt odo obt i ene un gner o cuya cl ave es i gual a l a cl ave del
* gner o dada por el par met r o.
* @par amgener o Obj et o de t i po Gener o con l a cl ave de l a gner o a buscar
* @r et ur n El gner o si l o encuent r a. nul l en caso cont r ar i o.
608 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Gener o obt en( Gener o gener o) t hr ows Per si st enci aExcept i on {
Resul t Set r engl on;

/ / Cr ea l a sent enci a SQL par a buscar el gner o en l a t abl a gner os.
St r i ng sql = " SELECT * FROM " + nomTabl a +
" WHERE cveGener o = ' " + gener o. get CveGener o( ) + " ' ; " ;

/ / Ej ecut a l a consul t a
consul t a( sql ) ;

/ / Si hay un r engl n en l a t abl a con el gner o buscado
i f ( ( r engl on = obt enRengl on( ) ) ! = nul l ) {
t r y {
/ / Cr ea un obj et o del t i po Gener o con l os campos del r engl on de l a
/ / t abl a.
Gener o gener oHal l ado = new Gener o( r engl on. get St r i ng( " cveGener o" ) ,
r engl on. get St r i ng( " nombr e" ) ,
r engl on. get St r i ng( " t i poMedi o" )
. char At ( 0) ) ;
r et ur n gener oHal l ado;
}
cat ch ( SQLExcept i on sql e) {
t hr ow new
Per si st enci aExcept i on( " Er r or al acceder a l a base de dat os" , sql e) ;
}
}
/ / Si no, r egr esa nul l
r et ur n nul l ;
}

/ **
* Est e mt odo per mi t e i nser t ar un r engl n de l a t abl a con l os at r i but os de
* l os obj et os de l a cl ase Gener o.
* @par amgener o Gener o a i nser t ar en l a t abl a gener oess
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d agr ega( Gener o gener o) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a par a i nser t ar .
/ / La sent enci a debe t er mi nar en un ;
sql += " I NSERT " + nomTabl a;
sql += " SET cveGener o = ' " + gener o. get CveGener o( ) + " ' " ;
sql += " , nombr e = ' " + gener o. get Nombr e( ) + " ' " ;
sql += " , t i poMedi o = ' " + gener o. get Ti poMedi o( ) + " ' ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e modi f i car un r engl n de l a t abl a con l os at r i but os
* de l os obj et os de l a cl ase Gener o.
* @par amgener o El usuar i o a modi f i car
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
Tema 15 Aplicaciones de dos Capas 609
ITSON Manuel Domitsu Kono
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a con l a act ual i zaci n.
/ / La sent enci a debe t er mi nar en un ;
sql += " UPDATE " + nomTabl a;
sql += " SET cveGener o = ' " + gener o. get CveGener o( ) + " ' " ;
sql += " , nombr e = ' " + gener o. get Nombr e( ) + " ' " ;
sql += " , t i poMedi o = ' " + gener o. get Ti poMedi o( ) + " ' " ;
sql += " WHERE cveGener o = ' " + gener o. get CveGener o( ) + " ' ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e bor r ar un r engl n de l a t abl a con l os at r i but os de
* l os obj et os de l a cl ase Gener o.
* @par amgener o Gener o a bor r ar
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows Per si st enci aExcept i on {
St r i ng sql = " " ;

/ / Cr ea l a sent enci a par a bor r ar .
/ / La sent enci a debe t er mi nar en un ;
sql += " DELETE FROM " + nomTabl a;
sql += " WHERE cveGener o = ' " + gener o. get CveGener o( ) + " ' ; " ;

/ / Ej ecut a l a sent enci a
act ual i za( sql ) ;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Gener o usando el comando de consul t a dado por el par met r o.
* @par amsql Comando de consul t a dado por el par met r o.
* @r et ur n Una l i st a de l os obj et os del t i po Gener o de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Gener o> l i st a( St r i ng sql ) t hr ows Per si st enci aExcept i on {
Resul t Set r engl on;
Li st <Gener o> l i st a = new Ar r ayLi st <Gener o>( ) ;

/ / Ej ecut a l a consul t a
consul t a( sql ) ;

/ / Mi ent r as haya gener oes en l a t abl a
whi l e ( ( r engl on = obt enRengl on( ) ) ! = nul l ) {
t r y {
/ / Cr ea un obj et o del t i po Gener o con l os campos del r engl n de l a
/ / t abl a.
Gener o gener o = new Gener o( r engl on. get St r i ng( " cveGener o" ) ,
r engl on. get St r i ng( " nombr e" ) ,
r engl on. get St r i ng( " t i poMedi o" ) . char At ( 0) ) ;

610 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
/ / Agr ega l a pel cul a al vect or de pel cul a
l i st a. add( gener o) ;
}
cat ch ( SQLExcept i on sql e) {
t hr ow new
Per si st enci aExcept i on( " Er r or al acceder a l a base de dat os" , sql e) ;
}
}
r et ur n l i st a;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Gener o.
* @r et ur n Una l i st a de l os obj et os del t i po Gener o de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Gener o> l i st a( ) t hr ows Per si st enci aExcept i on {
St r i ng sql = " SELECT * FROM " + nomTabl a + " ; " ;

r et ur n l i st a( sql ) ;
}

/ **
* Est e mt odo per mi t e consul t ar l a t abl a con l os at r i but os de l os obj et os
* de l a cl ase Gener o y que t i enen el mi smo t i po de medi o.
* @par amt i t ul o T t ul o de l a gner o a buscar
* @r et ur n Una l i st a de l os obj et os del t i po Gener o de l a t abl a
* @t hr ows Per si st enci aExcept i on Si no puede acceder a l a base de dat os
*/
publ i c Li st <Gener o> l i st aMedi o( char t i poMedi o)
t hr ows Per si st enci aExcept i on {
St r i ng sql = " SELECT * FROM " + nomTabl a + " WHERE t i poMedi o = ' "
+ t i poMedi o + " ' " ;

r et ur n l i st a( sql ) ;
}
}

De la misma manera que se procedi en el Tema 6: Colecciones y Tema 8: Entrada y
Salida, por encima de las clases Canci ones, Pel i cul as y Gener os que nos
permiten el acceso a las tablas de la base de datos musica, se tendr una clase de
fachada FachadaBD que nos encapsular el mecanismo de persistencia. La clase
FachadaBD implementa la interfaz I Fachada, como se muestra en la figura 15.4:
Tema 15 Aplicaciones de dos Capas 611
ITSON Manuel Domitsu Kono

Figura 15.4. Fachada de la Capa de Persistencia del Programa AmanteMusica,
Versin Base de Datos

Los mtodos de la clase FachadaBD lanzan excepciones de la clase
FachadaExcept i on vista en Tema 6: Colecciones. El cdigo parcial de la clase
FachadaBD es:

FachadaBD.java
/ *
* FachadaBD. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package f achadas;

i mpor t j ava. sql . *;
i mpor t j ava. ut i l . Li st ;
i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t per si st enci a. *;
i mpor t i nt er f aces. I Fachada;
i mpor t excepci ones. *;
612 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono

/ **
* Est a cl ase i mpl ement a l a i nt er f az I Fachada del mecani smo de per si st enci a
* de base de dat os del pr ogr ama Amant eMusi ca
*
* @aut hor mdomi t su
*/
publ i c cl ass FachadaBD i mpl ement s I Fachada {
/ / URL de l a base de dat os. Si nt axi s:
/ / " j dbc: mysql : / / di r I P del ser vi dor / base de dat os"
/ / Si l a base de dat os est en l a mqui na l ocal use l ocal host en l ugar de
/ / l a di r ecci n I P del ser vi dor
pr i vat e st at i c f i nal St r i ng ur l = " j dbc: mysql : / / l ocal host / musi ca" ;
/ / Nombr e del usuar i o que t i ene acceso a l a base de dat os
pr i vat e st at i c f i nal St r i ng usuar i o = " r oot " ;
/ / Passwor d del usuar i o
pr i vat e st at i c f i nal St r i ng passwor d = " sesamo" ;

pr i vat e Canci ones cat al ogoCanci ones;
pr i vat e Pel i cul as cat al ogoPel i cul as;
pr i vat e Gener os cat al ogoGener os;

/ **
* Const r uct or pr edet er mi nado
*/
publ i c FachadaBD( ) {
/ / Cr ea un obj et o del t i po cat al ogoCanci ones par a accesar a l a t abl a
/ / canci ones
cat al ogoCanci ones = new Canci ones( " canci ones" ) ;

/ / Cr ea un obj et o del t i po cat al ogoPel i cul as par a accesar a l a t abl a
/ / pel i cul as
cat al ogoPel i cul as = new Pel i cul as( " pel i cul as" ) ;

/ / Cr ea un obj et o del t i po cat al ogoGener os par a accesar a l a t abl a
/ / gener os
cat al ogoGener os = new Gener os( " gener os" ) ;
}

/ **
* Obt i ene una canci n de l a t abl a canci ones
* @par amcanci on Canci on a obt ener
* @r et ur n La canci n si exi st e, nul l en caso cont r ar i o
* @t hr ows FachadaExcept i on Si no se puede obt ener l a canci n.
*/
publ i c Canci on obt en( Canci on canci on) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;
Canci on canci onHal l ada;
Gener o gener oHal l ado;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoCanci ones. set Conexi on( conn) ;
cat al ogoGener os. set Conexi on( conn) ;

Tema 15 Aplicaciones de dos Capas 613
ITSON Manuel Domitsu Kono
/ / Obt en l a canci n
canci onHal l ada = cat al ogoCanci ones. obt en( canci on) ;

i f ( canci onHal l ada ! = nul l ) {
/ / Obt en el gner o de l a canci n
gener oHal l ado = cat al ogoGener os. obt en( canci onHal l ada. get Gener o( ) ) ;

/ / Se agr ega el gner o a l a canci n
canci onHal l ada. set Gener o( gener oHal l ado) ;
}
/ / Regr esa l a canci n
r et ur n canci onHal l ada;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede obt ener l a canci n" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede obt ener l a canci n" , pe) ;
}
}
}

/ **
* Agr ega una canci n a l a t abl a canci ones. No se per mi t en canci ones
* con cl aves r epet i das
* @par amcanci on Canci on a agr egar
* @t hr ows FachadaExcept i on Si l a canci n est r epet i da o no se puede
* agr egar l a canci n a l a t abl a canci ones.
*/
publ i c voi d agr ega( Canci on canci on) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoCanci ones. set Conexi on( conn) ;

/ / Busca l a canci n en l a t abl a canci ones
Canci on canci onBuscada = cat al ogoCanci ones. obt en( canci on) ;

/ / Si l a hay, no se agr ega a l a t abl a
i f ( canci onBuscada ! = nul l )
t hr ow new FachadaExcept i on( " Canci n r epet i da" ) ;

/ / Agr ega l a nueva canci n a l a t abl a
cat al ogoCanci ones. agr ega( canci on) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede agr egar l a canci n" , pe) ;
}
f i nal l y {
614 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede agr egar l a canci n" , pe) ;
}
}
}

/ **
* Act ual i za una canci n de l a t abl a canci ones
* @par amcanci on Canci on a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar l a canci n de l a
* t abl a canci ones.
*/
publ i c voi d act ual i za( Canci on canci on) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoCanci ones. set Conexi on( conn) ;

/ / Act ual i za l a canci n de l a t abl a canci ones
cat al ogoCanci ones. act ual i za( canci on) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede act ual i zar l a canci n" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede act ual i zar l a canci n" , pe) ;
}
}
}

/ **
* El i mi na una canci n de l a t abl a canci ones
* @par amcanci on Canci on a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar l a canci n de l a
* t abl a canci ones.
*/
publ i c voi d el i mi na( Canci on canci on) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoCanci ones. set Conexi on( conn) ;

Tema 15 Aplicaciones de dos Capas 615
ITSON Manuel Domitsu Kono
/ / El i mi na l a canci n de l a t abl a canci ones
cat al ogoCanci ones. el i mi na( canci on) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar l a canci n" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar l a canci n" , pe) ;
}
}
}

/ **
* Obt i ene una pel cul a de l a t abl a pel i cul as
* @par ampel i cul a Pel i cul a a obt ener
* @r et ur n La pel cul a si exi st e, nul l en caso cont r ar i o
* @t hr ows FachadaExcept i on Si no se puede obt ener l a pel cul a de l a t abl a
* pel i cul as.
*/
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;
Pel i cul a pel i cul aHal l ada;
Gener o gener oHal l ado;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoPel i cul as. set Conexi on( conn) ;
cat al ogoGener os. set Conexi on( conn) ;

/ / Obt en l a pel cul a
pel i cul aHal l ada = cat al ogoPel i cul as. obt en( pel i cul a) ;

i f ( pel i cul aHal l ada ! = nul l ) {
/ / Obt en el gner o de l a canci n
gener oHal l ado = cat al ogoGener os. obt en( pel i cul aHal l ada. get Gener o( ) ) ;

/ / Se agr ega el gner o a l a pel cul a
pel i cul aHal l ada. set Gener o( gener oHal l ado) ;
}

/ / Regr esa l a pel cul a
r et ur n pel i cul aHal l ada;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede obt ener l a pel cul a" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
616 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede obt ener l a pel cul a" , pe) ;
}
}
}

/ **
* Agr ega una pel cul a a l a t abl a pel i cul as. No se per mi t en pel i cul as
* con cl aves r epet i das
* @par ampel i cul a Pel cul a a agr egar
* @t hr ows FachadaExcept i on Si l a pel cul a est r epet i da o no se puede
* agr egar l a pel cul a a l a t abl a pel i cul as.
*/
publ i c voi d agr ega( Pel i cul a pel i cul a) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoPel i cul as. set Conexi on( conn) ;

/ / Busca l a pel cul a en l a t abl a pel i cul as
Pel i cul a pel i cul aBuscada = cat al ogoPel i cul as. obt en( pel i cul a) ;

/ / Si l o hay, no se agr ega a l a t abl a
i f ( pel i cul aBuscada ! = nul l )
t hr ow new FachadaExcept i on( " Pel cul a r epet i da" ) ;

/ / Agr ega l a nueva pel cul a a l a t abl a
cat al ogoPel i cul as. agr ega( pel i cul a) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede agr egar l a pel cul a" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede agr egar l a pel cul a" , pe) ;
}
}
}

/ **
* Act ual i za una pel cul a de l a t abl a pel i cul as
* @par ampel i cul a Pel i cul a a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar l a pel cul a de l a
* t abl a pel cul as.
*/
publ i c voi d act ual i za( Pel i cul a pel i cul a) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
Tema 15 Aplicaciones de dos Capas 617
ITSON Manuel Domitsu Kono
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoPel i cul as. set Conexi on( conn) ;

/ / Act ual i za l a pel cul a de l a t abl a
cat al ogoPel i cul as. act ual i za( pel i cul a) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede act ual i zar l a pel cul a" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede act ual i zar l a pel cul a" , pe) ;
}
}
}

/ **
* El i mi na una pel cul a de l a Tabl a pel i cul as
* @par ampel i cul a Pel i cul a a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar l a pel cul a de l a
* t abl a pel cul as.
*/
publ i c voi d el i mi na( Pel i cul a pel i cul a) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoPel i cul as. set Conexi on( conn) ;

/ / El i mi na l a pel cul a del cat l ogo
cat al ogoPel i cul as. el i mi na( pel i cul a) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar l a pel cul a" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar l a pel cul a" , pe) ;
}
}
}

/ **
* Obt i ene un gner o de l a t abl a gener os
* @par amgener o Gner o a obt ener
618 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
* @r et ur n El gner o si exi st e, nul l en caso cont r ar i o
* @t hr ows FachadaExcept i on Si no se puede obt ener el gner o.
*/
publ i c Gener o obt en( Gener o gener o) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoGener os. set Conexi on( conn) ;

/ / Obt en el gner o
r et ur n cat al ogoGener os. obt en( gener o) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede obt ener el gner o" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede obt ener el gner o" , pe) ;
}
}
}

/ **
* Agr ega un gner o a l a t abl a gner os. No se per mi t en gner os
* con cl aves r epet i das
* @par amgener o Gner o a agr egar
* @t hr ows FachadaExcept i on Si el gner o est r epet i do o no se puede
* agr egar el gner o a l a t abl a gener os.
*/
publ i c voi d agr ega( Gener o gener o) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoGener os. set Conexi on( conn) ;

/ / Busca el gner o en l a t abl a gener os
Gener o gener oBuscado = cat al ogoGener os. obt en( gener o) ;

/ / Si l o hay, no se agr ega a l a t abl a
i f ( gener oBuscado ! = nul l ) t hr ow new FachadaExcept i on( " Gner o
r epet i do" ) ;

/ / Agr ega el nuevo gner o a l a t abl a
cat al ogoGener os. agr ega( gener o) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede agr egar el gner o" , pe) ;
Tema 15 Aplicaciones de dos Capas 619
ITSON Manuel Domitsu Kono
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede agr egar el gner o" , pe) ;
}
}
}

/ **
* Act ual i za un gner o de l a t abl a gner os
* @par amgener o Gner o a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar el gner o de l a
* t abl a gener os.
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoGener os. set Conexi on( conn) ;

/ / Act ual i za el gner o de l a t abl a gener os
cat al ogoGener os. act ual i za( gener o) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede act ual i zar el gner o" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede act ual i zar el gner o" , pe) ;
}
}
}

/ **
* El i mi na un gner o de l a t abl a gener os
* @par amgener o Gner o a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar el gner o de l a
* t abl a gener os.
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
620 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
cat al ogoGener os. set Conexi on( conn) ;

/ / El i mi na el gner o de l a t abl a gener os
cat al ogoGener os. el i mi na( gener o) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar el gner o" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar el gner o" , pe) ;
}
}
}

/ **
* Obt i ene una l i st a t odas l as canci ones
* @r et ur n Una l i st a de t odas l as canci ones
* @t hr ows FachadaExcept i on Si no se puede obt ener l a l i st a de canci ones
*/
publ i c Li st <Canci on> consul t aCanci ones( ) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoCanci ones. set Conexi on( conn) ;

/ / Regr esa l a l i st a de canci ones
r et ur n agr egaGener oCanci ones( cat al ogoCanci ones. l i st a( ) ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de canci ones" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de canci ones" , pe) ;
}
}
}

/ **
* Le agr ega l os at r i but os del gner o a cada canci n de l a l i st a
* @par aml i st aCanci ones Li st a de l as canci ones a l as que se l es
* agr egar l os at r i but os del gner o
* @r et ur n Una l i st a de canci ones
Tema 15 Aplicaciones de dos Capas 621
ITSON Manuel Domitsu Kono
* @t hr ows FachadaExcept i on Si hay un pr obl ema al conect ar se a l a
* base de dat os
*/
pr i vat e Li st <Canci on> agr egaGener oCanci ones( Li st <Canci on> l i st aCanci ones)
t hr ows FachadaExcept i on {
Gener o gener o;
Canci on canci on;
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoGener os. set Conexi on( conn) ;

/ / Par a cada canci n de l a l i st a
f or ( i nt i = 0; i < l i st aCanci ones. si ze( ) ; i ++) {
/ / Obt n l a canci n de l a l i st a
canci on = ( Canci on) l i st aCanci ones. get ( i ) ;

/ / Obt en el gner o de l a canci n del cat l ogo de gner os
gener o = cat al ogoGener os. obt en( canci on. get Gener o( ) ) ;

/ / Agr ega el gner o a l a canci n
canci on. set Gener o( gener o) ;
l i st aCanci ones. set ( i , canci on) ;
}

/ / Regr esa l a l i st a canci ones
r et ur n l i st aCanci ones;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de canci ones" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de canci ones" , pe) ;
}
}
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo t t ul o.
* @par amt i t ul o Ti t ul o de l as canci ones de l a l i st a
* @r et ur n Una l i st a de t odas l as canci ones con el mi smo
* t t ul o.
* @t hr ows FachadaExcept i on Si no se puede obt ener l a l i st a de canci ones
*/
publ i c Li st <Canci on> consul t aCanci onesTi t ul o( St r i ng t i t ul o)
t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;
622 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoCanci ones. set Conexi on( conn) ;

/ / Regr esa l a l i st a de canci ones
r et ur n agr egaGener oCanci ones( cat al ogoCanci ones. l i st aTi t ul o( t i t ul o) ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de canci ones" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de canci ones" , pe) ;
}
}
}

. . .

/ **
* Obt i ene una l i st a de l os gner os de canci ones
* @r et ur n Una l i st a de l os gner os canci ones
* @t hr ows FachadaExcept i on Si no se puede obt ener l a l i st a de gner os
*/
publ i c Li st <Gener os> consul t aGener osCanci ones( ) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoGener os. set Conexi on( conn) ;

/ / Regr esa l a l i st a de gner os de canci ones
r et ur n cat al ogoGener os. l i st aMedi o( ' C' ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de gner os" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de gner os" , pe) ;
Tema 15 Aplicaciones de dos Capas 623
ITSON Manuel Domitsu Kono
}
}
}

/ **
* Obt i ene una l i st a de l os gner os de pel cul as
* @r et ur n Una l i st a de l os gner os pel cul as
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de gner os.
*/
publ i c Li st <Gener o> consul t aGener osPel i cul as( ) t hr ows FachadaExcept i on {
Conexi on conexi on = nul l ;

t r y {
/ / Est abl ece l a conexi on con l a base de dat os
conexi on = new Conexi on( ur l , usuar i o, passwor d) ;
Connect i on conn = conexi on. get Conexi on( ) ;
cat al ogoGener os. set Conexi on( conn) ;

/ / Regr esa l a l i st a de gner os de canci ones
r et ur n cat al ogoGener os. l i st aMedi o( ' P' ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de gner os" , pe) ;
}
f i nal l y {
/ / Ci er r a l a conexi n
t r y {
i f ( conexi on ! = nul l ) conexi on. cl ose( ) ;
}
cat ch ( Per si st enci aExcept i on pe) {
t hr ow new
FachadaExcept i on( " No se puede obt ener l a l i st a de gner os" , pe) ;
}
}
}
}

Para probar la clase FachadaBD y las clases Canci ones y Pel i cul as en su versin
que encapsulan las tablas de base de datos podemos usar la clase de prueba Prueba4
vista en el Tema 8: Entrada y Salida modificando slo dos lneas:

Cambiar la lnea:

i mpor t f achadas. FachadaAr chi vos;

por sta:

i mpor t f achadas. FachadaBD;

Cambiar la lnea:

I Fachada f achada = new FachadaAr chi vos( ) ;
624 Aplicaciones de Dos Capas
ITSON Manuel Domitsu Kono
por sta:

I Fachada f achada = new FachadaBD( ) ;

Estos dos cambios son tambin los nicos que hay que hacerle a la clase de control
Control vista en el Tema 7: Desarrollo de Aplicaciones para cambiar el mecanismo de
persistencia, obviamente tambin es necesario sustituir la clase de fachada y las clases
Canci ones y Pel i cul as a sus versiones de base de datos.

Vous aimerez peut-être aussi