Professional Documents
Culture Documents
4. Applets..............................................................................................................................29
4.1 Ciclo de vida de un applet...........................................................................................29
4.1.1 Cargar el applet...................................................................................................29
4.1.2 Cambiando y regresando a la pgina del applet..................................................30
4.1.3 Cerrando el navegador........................................................................................31
4.2 Mtodos bsicos de la clase applet ............................................................................31
4.3 Programando interfaces grficas ................................................................................32
5. Programacin de interfaz grfica de usuarios ...................................................................35
5.1 Jerarqua de objetos del AWT ....................................................................................36
5.1.1 Clase Component ...............................................................................................36
5.1.2 Clase Button .......................................................................................................37
5.1.3 Clase Checkbox ..................................................................................................38
5.1.4 Clase Label .........................................................................................................40
5.1.5 Clase Container ..................................................................................................41
5.1.6 Clase Frame .......................................................................................................42
5.1.7 La clase MenuBar y otros objetos relacionados ..................................................45
5.2 Manejo de eventos .....................................................................................................48
5.2.1 Modelo delegacional ...........................................................................................49
6. JDBC ................................................................................................................................56
6.1 Introduccin ................................................................................................................56
6.1.1 Operaciones de un programa que utiliza el JDBC ...............................................56
6.1.2 Componentes del JDBC......................................................................................57
6.1.3 Tipos de controladores de JDBC.........................................................................57
6.2 Uso del controlador JDBC-ODBC bridge ....................................................................59
6.2.1 Instalando y configurando una base de datos con ODBC ...................................59
6.2.2 Estableciendo una conexin de base de datos....................................................61
6.2.3 Usando comandos bsicos de SQL ....................................................................62
BIBLIOGRAFA .....................................................................................................................67
Anexo A. La referencia this ...................................................................................................68
Anexo B. El modificador static...............................................................................................71
Anexo C. La etiqueta APPLET ..............................................................................................73
1. INTRODUCCIN A JAVA
El desarrollo de aplicaciones de computadoras ha evolucionado desde sus orgenes de manera
constante, al igual que las herramientas con las que se generan. En los ltimos aos ha sido
evidente el auge en la utilizacin del lenguaje Java, como una alternativa real y funcional para el
desarrollo de aplicaciones estndares o en lnea, con las ventajas que ofrece la Programacin
Orientada a Objetos (POO).
En el presente captulo se analizarn los orgenes de Java, as como su descripcin general; y
por ltimo se dar una breve explicacin de cmo instalar el JDK (Java Development Kit) para
comenzar a programar.
prctica, los lenguajes orientados a objetos cuentan con una serie de clases ya definidas. En el
caso de Java, existe una amplia variedad de clases (y por consecuencia objetos). Estas clases
definen objetos que pueden ser utilizados para distintas tareas: manejo de archivos, manejo del
ambiente grfico, programacin de aplicaciones de red, entre otros.
Otro concepto importante de la POO es la herencia. Bajo el concepto de herencia es posible
definir nuevos tipos de objetos a partir de los ya existentes. Existen dos tipos de herencia: la
herencia simple y la herencia mltiple. La primera hace referencia a la capacidad para definir
una nueva clase a partir de otra clase y solo una clase. Por su parte en el segundo tipo de
herencia, una clase puede definirse a partir de dos o ms clases. Java slo contempla la
herencia simple debido a las implicaciones de la herencia mltiple. La herencia es un
mecanismo que permite la reutilizacin de cdigo.
En Java, las clases se agrupan para formar lo que se conoce como paquetes. Estos paquetes
pueden ser utilizados en las aplicaciones que se programen.
Con Java, este concepto cambia radicalmente. Se requiere nuevamente de un cdigo fuente,
pero el compilador de manera independiente a la plataforma en que se utiliza, generar un
cdigo intermedio (en este caso conocido como Java Byte Code). El cdigo intermedio es,
finalmente, ejecutado por un intrprete de Java. Tanto el compilador como el intrprete
dependen de la plataforma en particular del cliente, pero no as el cdigo intermedio. La figura 2
muestra este nuevo concepto.
Aplicaciones.
Applets.
1.7.1 Aplicaciones
Las aplicaciones son programas que se ejecutan con un intrprete. El intrprete est diseado
para correr en una plataforma en particular y recibe como parmetro el programa de Java,
adems de los parmetros propios del programa en particular.
Las aplicaciones pueden ser de distinta ndole, desde simples programas como los mostrados
en la figura 3.
En estos ejemplos, las aplicaciones fueron muy simples y slo requirieron del intrprete para
sus ejecuciones. En este caso en particular, se utiliz el intrprete para Windows 32-bits,
incluido en el JDK que se explicar en la siguiente seccin.
Ahora bien, las aplicaciones aqu mostradas slo tienen una interfaz ASCII, pero se pueden
desarrollar aplicaciones grficas.
1.7.2 Applets
Los applets son un tipo especial de aplicacin. Con el auge de las aplicaciones en la Internet,
surge un nuevo tipo de programas desarrollados con Java. El objetivo de los applets es el de
incluir un programa que se ejecuta dentro de una pgina HTML, como la que se muestra en la
figura 5.
Cabe sealar que los applets no se ejecutan del mismo modo que un CGI2. En el caso de un
CGI, el servidor ejecuta el programa con sus recursos, y una vez procesada la informacin la
enva de regreso al navegador en forma de una pgina HTML. Un applet, por su parte, se aloja
en un servidor junto con la pgina que le hace referencia. Cuando dicha pgina se carga
tambin lo hace el applet, una vez cargado en el navegador, ste comienza a ejecutarse
utilizando ahora los recursos del equipo cliente.
Por las caractersticas propias de los applets, tienen una serie de limitaciones con respecto a
las aplicaciones. Como se nota, los applets estn pensados para ser distribuidos de forma
inmediata y esto conlleva una serie de implicaciones de seguridad muy fuertes, por ejemplo, un
applet no puede escribir o leer archivos de la mquina local, slo puede acceder a recursos del
equipo servidor.
Aun con estas limitantes, los applets vienen a ser un tipo de programas muy importantes para
los desarrolladores de Java, y como se ver en captulos posteriores, pueden crearse applets
como interfaces grficas para la manipulacin de sistemas de bases de datos. Un ejemplo de
esto ltimo, se presenta en la figura 6.
Otro ejemplo interesante de las aplicaciones de los applets se tiene en la figura 7, el cual fue
uno de los ganadores de la Java Cup International Award Winner del 97. Dicho applet permite al
usuario efectuar cortes longitudinales sobre el cuerpo humano.
Hasta este momento, se han revisado algunos ejemplos de los programas que se pueden
desarrollar utilizando Java. En la siguiente seccin se abordar el tema de las herramientas de
desarrollo de Java.
Si se instala en un equipo PC, se sugiere agregar las dos siguientes lneas al archivo
Autoexec.bat para el caso del JDK 1.1 y anteriores:
SET PATH=C:\JDK1.1.7\BIN;%PATH%
SET CLASSPATH= C:\JDK1.1.7\LIB\CLASSES.ZIP;.
Si se instala en un equipo con sistema operativo UNIX, se sugiere agregar las dos
siguientes lneas al archivo fuente del shell en cuestin.
SET PATH /usr/local/jdk1.1.7/bin:%PATH%
SET CLASSPATH /usr/local/jdk1.1.7/lib/classes.zip:.
Para el caso de otras herramientas, es necesario revisar la documentacin e instrucciones que ofrecen sus autores.
Una vez configurado el ambiente de trabajo podemos compilar y ejecutar los programas que se
vayan desarrollando. Usar estas herramientas es muy simple, pero representa un gran
problema para el desarrollador ya que carece de un ambiente grfico de trabajo funcional y
eficiente. Es decir, el cdigo fuente de los programas que se escriban, se har con cualquier
editor de texto que produzca archivos ASCII.
Actualmente existen herramientas poderosas para el desarrollo de aplicaciones, y applets de
formas grficas y con una amplia biblioteca de clases y soluciones de integracin inmediata. En
las siguientes secciones se presentan a grandes rasgos algunos de ellos.
1.8.2 Java Work Shop
Esta es una herramienta de desarrollo visual que ofrece SUN Microsystems. El producto incluye:
Soporte para el nuevo Java 2 SDK, Standard Edition, v 1.2 (formalmente el JDK 1.2).
Figura 8.
Figura 9.
10
EDIT, en MS-DOS.
VI, en Unix.
PICO, en Unix.
ED, en Unix.
EMACS, en Unix.
Se debe tener cuidado de respetar las maysculas y las minsculas con las que se escribe el
cdigo fuente, ya que Java es un lenguaje sensible a maysculas y minsculas. Esta regla se
aplica tanto para el cdigo fuente como para el nombre del archivo.
Una vez generado el archivo fuente con las especificaciones mencionadas, se procede a
compilarlo con el programa Java, usando como argumento el nombre del archivo. La figura 10
muestra el uso de dicho programa y lista los archivos del directorio.
Figura 10.
11
Cuando no se genera error alguno, origina un segundo archivo que tiene el mismo nombre que
el del cdigo fuente, pero la extensin es .class. Este ltimo archivo es el correspondiente al
Java Byte Code.
En caso de que hubiera un error de sintaxis en el cdigo fuente, el compilador marcar el error
correspondiente. La figura 11 muestra el caso en que se compila el cdigo anterior, pero se
omite el punto y coma al final de la lnea: System.out.println (Hola Mundo!!! ). Cabe sealar
que si existe algn error en la compilacin no se genera el archivo .class.
Figura 11.
En caso de no existir algn error en la compilacin del cdigo fuente, se utiliza el programa
Java para ejecutar el programa, y como parmetro el nombre del archivo .class sin esta
extensin, ya que automticamente el programa busca dicho archivo. La figura 12 muestra la
ejecucin del programa HolaMundo.
Figura 12.
Si este programa se ejecuta en su equipo, puede tener la certeza de que instal correctamente
la herramienta de desarrollo de SUN, y que su ambiente de trabajo est listo para los siguientes
ejemplos. En caso contrario, consulte el archivo README de la instalacin, a fin de detectar la
causa por la que no se compile y/o ejecute este programa.
En los siguientes captulos se presentarn ms cdigos fuente, y las reglas que se deben seguir
para escribir correctamente programas usando el lenguaje de programacin Java.
12
Es decir, la representacin anterior indica que las variables: x, y y r son del tipo double5. Los
mtodos de area() y circunferencia() regresan valores de tipo double los cuales se calculan con
base en los datos anteriores.
Cabe sealar que esta representacin de clases es independiente del lenguaje, por lo que se le
indica al lector no confundir la representacin con UML y la implementacin de la clase con el
lenguaje de programacin Java.
La palabra Circulo no presenta acentos, ya que para definir nombres de identificadores, variables y mtodos slo se
pueden utilizar letras y nmeros, nunca caracteres especiales.
El tipo de dato double est definido en Java y representa nmeros de punto flotante de doble precisin.
13
Si bien una clase nos da la idea en conjunto de un grupo de objetos, cada objeto crculo es
diferente de los dems, ya que a cada uno de ellos cuenta con su propio conjunto de datos
(variables), y su conjunto mtodos (funciones).
Para traducir esta especificacin a un cdigo en Java, primero se escribir el archivo fuente con
un editor de texto simple que genere ASCII. El nombre del archivo ser el mismo que el de la
clase que se est especificando y la extensin ser .java. En otras palabras, el nombre del
archivo correspondiente al cdigo fuente de la clase Circulo es: Circulo.java. Note que la
primera letra tanto del nombre de la clase como del archivo fuente se encuentran en
maysculas, ya que Java es un lenguaje sensible a maysculas y minsculas.
El primer paso para especificar una clase en Java es la siguiente:
public class Circulo
{
}
Las palabras reservadas public class, al inicio del cdigo, indican el alcance y en s la
declaracin de una clase. En este caso particular del cdigo el nombre de dicha clase es
Circulo. Entre las dos llaves, una que abre y otra que cierra, se especifican los datos y mtodos
de la clase.
Los datos que se han definido son: x, y y r, todas ellas de tipo double. A continuacin se
presenta la definicin de estas variables en el cdigo.
public class Circulo
{
public double x, y;
public double r;
}
La declaracin de variables en Java sigue bsicamente las mismas reglas que las del lenguaje
C, es decir, primero el tipo de dato y despus la lista de variables. Optativamente una misma
declaracin puede ser utilizada para ms de una variable, como con las variables x y y de
nuestro ejemplo. La palabra reservada public en las variables es optativa.
Lo que resta ahora es definir los mtodos de los objetos de esta clase. Los mtodos que se han
presentado devuelven datos numricos de tipo double. La implementacin del mtodo area() se
inicia con la especificacin de la siguiente forma:
public double area()
{
}
La palabra reservada double en este caso indica que el mtodo regresar una expresin
numrica de dicho tipo. El mtodo area() regresar el valor de la frmula: x r2. Para tal efecto,
se utilizar la siguiente versin de la frmula: 3.14159 * r * r.
La palabra reservada para indicar que se regresa un valor es return, seguida de la expresin a
evaluarse. El siguiente cdigo muestra la implementacin completa del mtodo area().
14
return 3.14159 * r * r;
}
return 2 * 3.14159 * r;
}
public double x, y;
public double r;
public double area()
{
return 3.14159 * r * r;
}
return 2 * 3.14159 * r;
}
}
Ejemplo 1.
15
Circulo c;
c = new Circulo();
Con la ltima lnea se ha originado una instancia de la clase Circulo (es decir, un objeto), y se
ha referenciado con la variable c. Ya que se ha creado tal objeto, es posible usar sus campos
de datos ( x, y y r). La sintaxis ser familiar para los programadores de C:
Circulo c = new Circulo();
c.x = 2.0;
c.y = 2.0;
c.r = 1.0;
En este caso se asignaron los valores de 2.0, 2.0 y 1.0 a las variables x, y y r del objeto que se
cre, respectivamente.
Para verificar la creacin y la asignacin de valores hasta aqu presentados, el cdigo del
ejemplo 2 muestra el uso del mtodo main para la clase Circulo.
public class Circulo
{
public double x, y;
public double r;
public double area()
{
return 3.14159 * r * r;
}
public double circunferencia()
{
return 2 * 3.14159 * r;
}
public static void main ( String args [ ] )
{
Circulo c;
c = new Circulo ( );
c.x = 2.0;
c.y = 2.0;
c.r = 1.0;
System.out.println (c.x );
System.out.println (c.y );
System.out.println (c.r );
}
}
Ejemplo 2.
16
Figura 2.
17
y = b;
r = c;
}
Ejemplo 3.
En este caso, el mtodo constructor inicializa los campos de datos del objeto que se est
creando. Este mtodo es equivalente al que se muestra en el ejemplo 4.
public Circulo(double a, double b, double c) {
this.x = a;
this.y = b;
this.r = c;
}
Ejemplo 4.
Cada vez que este ltimo constructor se ejecuta, this hace referencia al objeto que se est
creando en ese instante.
La palabra this se puede usar explcitamente cuando se quiere poner en claro que un mtodo
accesa sus propias variables y/o mtodos. Por ejemplo, se puede re-escribir el mtodo area()
de la siguiente forma:
public double area() {return 3.14159 * this.r * this.r;}
En un mtodo tan sencillo como ste, no es necesario ser explcito. Sin embargo, en casos ms
complicados, parece que utilizar un this explcito incrementa la claridad del cdigo aunque no
sea estrictamente necesario.
objeto nuevo.
2. Se llama al mtodo constructor.
Los mtodos constructores tiene el mismo nombre que el de la clase que los define.
18
Ahora, al crear un objeto de la clase Circulo, las variables de dicho objeto ya tienen valores que
les son asignadas desde el constructor.
Si desea el mismo efecto, pero con el constructor anterior, obtendra algo como el siguiente cdigo:
Circulo c = new Circulo();
c.x = 1.1414;
c.y = -1.0;
c.r = .25;
Mientras que con el nuevo constructor, la inicializacin de variables se vuelve parte del proceso
para crear el objeto:
Circulo c = new Circulo (1.1414, -1.0, .25);
Existen tres reglas importantes para nombrar a los constructores:
El nombre del mtodo constructor es siempre el mismo que el de la clase.
El valor de retorno del mtodo es implcitamente una instancia de dicha clase. Para
cualquier constructor, el tipo de valor de retorno no se especifica, ni se puede emplear la
palabra reservada void.
El objeto this regresa implcitamente; un constructor no debe usar una declaracin return
para regresar algn valor.
19
En este caso se definen tres constructores y todos ellos tienen el mismo nombre aunque
distintos parmetros. En la siguiente seccin se hace un anlisis de estas implicaciones.
20
21
3. LA HERENCIA
Hablando de manera general, los objetos estn definidos en trminos de clases. Se sabe lo
bastante sobre un objeto tanto como se conozca la clase de la cual provienen. Por ejemplo, si
desconoce lo qu es un velocpedo, con slo decirle que es una bicicleta, sabra entonces que
tiene dos llantas, un juego de manubrio y de pedales.
Los sistemas de programacin orientados a objetos toman esto de forma similar y permiten que las
clases sean definidas en trminos de otras clases. Por ejemplo, las bicicletas de montaa, las de
carrera y las dobles, todas ellas son subclases de la clase bicicleta. Similarmente, la clase Bicicleta
es la superclase de las bicicletas de montaa, de carreras y dobles.
Cada subclase hereda las cualidades (en la forma de declaraciones de variables) de la
superclase. Las bicicletas de montaa, de carrera y dobles comparten las mismas cualidades:
cadencia, velocidad y la forma. Tambin, cada subclase hereda mtodos de la superclase. Las
bicicletas de montaa, de carreras y dobles comparten algunos comportamientos: frenado y
cambio de velocidades, por ejemplo.
Sin embargo, las subclases no se limitan a las cualidades y comportamiento provisto por sus
superclases. Qu habra que sealar en esto? Las subclases pueden agregar variables y
mtodos para aquellos heredados de la superclase. Las bicicletas dobles tienen dos asientos y
dos pares de manubrios; algunas bicicletas de montaa tienen un conjunto extra de engranajes
de radio menor.
Las subclases pueden tambin sobre-escribir los mtodos heredados y proveer
implementaciones especficas para esos mtodos. Por ejemplo, si tuviera una bicicleta de
montaa con un conjunto extra de engranes, podra sobre-escribir el mtodo
"cambio_de_engranes( )" para que la bicicleta pudiera realmente usar estos nuevos engranajes.
22
Ahora bien, cuando se defina una nueva clase C como subclase de B, se debe agregar
"extends C" a la declaracin de la clase, y as sucesivamente. Esta relacin de herencia
sucesiva da como resultado el denominado rbol de herencia, que se muestra en la figura 1.
Figura 1.
Las clases en Java forman un rbol de herencia con la clase Object como su raz (todas las
clases heredan al menos de la clase Object). Por ejemplo, la clase Applet hereda de Panel, sta
a su vez de la clase Container, que a su vez hereda de Component, y sta finalmente de la
clase Object, tal como se muestra en la figura 2.
Figura 2.
23
Cuando se declara una clase sin definir explcitamente una clase de la cual herede, se asume
que dicha clase heredar su funcionalidad de la clase Object. En otras palabras, los ejemplos 2
y 3 son equivalentes.
public class A
{
***************
}
Ejemplo 2.
Como se mencion al inicio del captulo, la herencia permite definir nuevas clases a partir de las
ya existentes. En el ejemplo 4 se muestra la clase Rectangulo de la cual se define la clase
Cuadrado del ejemplo 5.
public class Rectangulo {
double x1, y1, x2, y2;
public double area() {
return Math.abs(x1 - x2) * Math.abs(y1 - y2);
}
public double perimetro() {
return (Math.abs(x1 - x2) + Math.abs(y1 - y2)) * 2;
}
public void estado() {
System.out.println(x1);
System.out.println(y1);
System.out.println(x2);
System.out.println(y2);
}
Rectangulo(double x1, double y1, double x2, double y2) {
this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2;
}
Rectangulo() {
this(0.0, 0.0, 1.0, 1.0);
}
}
Ejemplo 4.
24
En este caso, los objetos de la clase Cuadrado se crean con el mismo constructor de su
superclase, y pueden efectuar las mismas operaciones que los objetos Rectangulo tienen. Esta
funcionalidad se obtiene con slo declarar que sta es una subclase de Rectangulo.
Pero como tambin se explic, dicha funcionalidad puede ser modificada segn las
necesidades concretas de la nueva clase.
En el caso de los constructores existe una regla de funcionamiento, slo el mtodo constructor
por omisin se hereda tal cual como se defini en la superclase. Esto excluye a los dems
constructores que se hayan declarado. Cmo resolver este problema? Existen dos respuestas
a esta pregunta, la primera consistir en volver a escribir los mtodos constructores. Lo anterior
resulta de lo ms inconveniente, ya que no se reutilizara el cdigo ya compilado y probado. El
segundo mtodo es el uso de la palabra reservada super.
Pero para que esta clase represente a la figura geomtrica, el constructor requiere de
modificarse a fin de garantizar que la longitud de cada lado sea la misma. Note que no se
requiere modificar el constructor por omisin. Una solucin sera la que se muestra en el
ejemplo 7, en la cual, primero se crea el 'rectngulo', y despus se verifica si los lados tienen la
misma longitud, en caso de no ser as se ajustan las coordenadas.
25
this.x2 = x1 - d;
this.y2 = y1 - d;
}
}
Ejemplo 7.
Con estas modificaciones, puede garantizarse que los mtodos constructores proporcionarn
objetos Cuadrado de manera confiable.
Ahora bien, se podra pensar en modificar otros mtodos de la clase para ajustarlos a la forma
en que se est definiendo los mtodos area( ) y perimetro( ). Para ver un poco ms lo anterior,
se recurrir a la sobre-escritura de mtodos que se explica en la siguiente seccin.
El proceso de sobre-escritura es simple, se acta como si se escribiera la clase por primera vez
dentro de la clase.
26
Ahora bien, conforme se van generando nuevos datos y mtodos, o bien, las clases modifican
los mtodos que heredaron, la llamada a stos se va escalando a las superclases de la
siguiente forma: primero se busca si en la definicin de la clase actual se tiene declarado el
mtodo invocado, de ser as, se ejecuta este mtodo. En caso contrario se busca en la
definicin de la superclase y efecta el mismo anlisis. Esto continua sucesivamente hasta
llegar a la raz de herencia, en el caso de Java la clase Object. Si en este nivel no se encuentra
la definicin del mtodo, el compilador marcar un error.
27
28
4. APPLETS
Como se ha mencionado, existe otro tipo de aplicacin que puede programarse con Java
denominados applets. Los applets son programas que se ejecutan dentro de un documento
HTML y que corren con recursos del equipo cliente. Este tipo de programas tienen una serie de
restricciones para el acceso a recursos del equipo local debido a que su objetivo es el
desarrollo de aplicaciones de acceso global.
Para dejar ms claro el concepto de un applet, se retomar el ejemplo que est funcionando en
la direccin http://www.unam.mx/Temas/, el cual ofrece una opcin de bsqueda por teclado a
la manera de las ayudas de Windows. Ver figura 1.
Figura 1.
Cuando un navegador (con capacidad de ejecucin de applets) carga una pgina que tiene
asociado un applet, ocurren varias cosas. Lo primero es la verificacin de que el applet que se pide
cargar no contenga cdigo "peligroso", es decir, que no pueda recuperar informacin del equipo
local, como la lista de directorios y archivos, o en su caso la alteracin de los mismos. Una vez que
se comprueba que lo que se recibe es efectivamente un applet, comienza lo que se denomina el
ciclo de vida de un applet, que se explica en la siguiente seccin.
29
30
Los mtodos que all aparecen, responden a eventos especficos. A continuacin se da una
breve explicacin del funcionamiento de cada uno de estos mtodos.
init()
Sirve para inicializar al applet. Este mtodo se ejecuta slo despus de que el applet
se ha cargado.
start()
Este mtodo sirve para comenzar la ejecucin del applet, se ejecuta despus de que
se ha inicializado el applet, o bien, cuando se regresa a la pgina del applet.
stop() -- Detiene la ejecucin del applet. Este mtodo se ejecuta cuando los usuarios dejan la
pgina del applet, o bien, cuando se cierra el navegador.
destroy()-
31
Cabe mencionar, que los applets no requieren sobre-escribir todos y cada uno de los mtodos
definidos para los mismos. En el ejemplo 3 se muestra el cdigo fuente de un applet muy
sencillo, donde slo se requiri la modificacin del mtodo paint()7.
import java.applet.Applet;
import java.awt.Graphics;
public class HolaMundo extends Applet {
public void paint(Graphics g) {
g.drawString("Hola Mundo!!!", 40, 20);
}
}
Ejemplo 3.
El mtodo init() cumple de alguna manera la funcin de un constructor, ya que slo se ejecuta
inmediatamente despus de que el applet se ha cargado. Hay que notar que no se utiliza un
constructor para los applets, esto se debe a que es necesario garantizar el ambiente de trabajo
por completo, lo cual se verifica cuando el applet se carga.
Si el applet debe efectuar alguna operacin despus de su inicializacin ser necesario sobreescribir el mtodo start(). El mtodo start(), a la vez que activa al applet, desarrolla el trabajo del
mismo; tambin pone en funcionamiento uno o ms threads para desarrollar el trabajo. Por el
momento slo se dar importancia al primer punto. El mtodo stop() se ha definido para detener
la ejecucin del applet. El mtodo destroy() es raramente utilizado ya que el mtodo stop()
efecta todo lo necesario para detener la ejecucin del applet. Sin embargo, destroy() est
disponible para aquellos applets que requieran procesos adicionales antes de terminar la
ejecucin del applet.
32
Figura 2.
Para el caso de los applets, todos estos elementos que conformarn la interfaz grfica
(botones, cajas de texto, etc.), se van agregando en el mtodo init().
Supngase que se desea una interfaz como la que se muestra en la figura 3.
Figura 3.
33
34
Figura 1.
El paquete java.awt.event no est contenido en java.awt por lo que las importaciones deben realizarse de manera
separada en cada caso.
35
Figura 2.
La base de la herencia sigue siendo la case Object, pero la clase Component se toma como la
raz de la herencia de todos los componentes grficos de una interfaz. La clase Component es
definida como abstracta, es decir, no se puede generar objetos de la misma. A diferencia de
Component sus subclases pueden ser instanciadas, salvo las clases Container y
TextComponent que tambin son abstractas.
Las diferentes clases de la jerarqua del AWT se presentarn una por una, mostrando su
representacin grfica, sus propiedades y los mtodos ms tiles para su programacin.
5.1.1 Clase Component
Como se mencionaba, la clase es abstracta por lo que no pueden tenerse objetos de esta clase.
Su propsito es establecer un patrn de diseo y funcionalidad de los componentes grficos en
general.
Los objetos Component tienen definidos mtodos que permiten la recuperacin de informacin
relativa a ellos, adems de los mtodos que manipulan su aspecto final. Al ser la raz de
herencia de los componentes grficos, todos los mtodos que este objeto tenga, los tendrn
definidos las distintas subclases de ste.
Los mtodos de recuperacin de informacin ms importantes son los que se presentan en la
siguiente tabla:
Nombre
getHeight()
Tipo de retorno
int
Uso
Regresa el valor de la altura del componente.
36
getWidth()
getX()
int
Int
getY()
int
isEnabled()
boolean
isVisible()
bolean
getSize()
Dimension
Tipo de retorno
void
void
void
setBackground(Color)
setEnabled(boolean)
setLocation(int,int)
setSize(int,int)
update(Graphics)
void
void
void
void
void
Uso
Pinta el componente.
Repinta el componente.
Repinta el componente cada cierto tiempo en
milisegundos.
Establece un color de fondo.
Modifica su estado de disponibilidad: true o false
Establece la posicin del componente.
Establece las dimensiones del componente.
Actualiza la vista del componente.
Figura 3.
37
Los mtodos de recuperacin de informacin ms importantes de los objetos Button son los que
se presentan en la siguiente tabla:
Nombre
getActionCommand()
Tipo de retorno
String
getLabel()
String
Uso
Regresa el String asociado al evento del
botn.
Regresa un String que representa la
etiqueta del botn.
Tipo de retorno
void
Uso
Establece el String asociado a los eventos
del botn.
setLabel()
void
Figura 4.
38
Figura 5.
El siguiente cdigo muestra la definicin y creacin de cajas de opciones usando los primeros
dos constructores, que corresponden a la figura 4:
Checkbox cb1 = new Checkbox ( );
cb1.setLabel ( "Opcion 1" );
Checkbox cb2 = new Checkbox ( "Opcion 2", false );
Checkbox cb3 = new Checkbox ( "Opcion 3", true );
Checkbox cb4 = new Checkbox ( "Opcion 4", true );
El siguiente cdigo muestra la definicin y creacin de cajas de opciones de una seleccin a la
vez, usando los dos ltimos constructores. La figura 2 corresponde a este cdigo:
CheckboxGroup cbg = new CheckboxGroup ( );
Checkbox cb1 = new Checkbox ( "", cbg, false );
cb1.setLabel ( "Opcion 1" );
Checkbox cb2 = new Checkbox ( "Opcion 2", cbg, false );
Checkbox cb3 = new Checkbox ( "Opcion 3", cbg, true );
Checkbox cb4 = new Checkbox ( "Opcion 4", cbg, false );
Los mtodos de recuperacin de informacin ms importantes son los que se presentan en la
siguiente tabla:
Nombre
getCheckboxGroup()
Tipo de retorno
CheckboxGroup
getLabel( )
String
getState( )
bolean
Uso
Regresa
una
referencia
al
grupo
correspondiente de la caja de opcin.
Regresa el String de la etiqueta de la caja
de opcin.
Regresa el valor del estado de la caja: true
o false.
Nombre
setCheckboxGroup(CheckboxGroup)
setLabel(String)
setState(bolean)
Tipo de
retorno
void
void
void
39
Uso
Asigna el grupo a la caja.
Asigna una etiqueta a la caja de opcin.
Asigna el valor del estado de una caja de
opcin.
Figura 6.
Label(String, int): construye una etiqueta con un texto y justificado segn el valor del
segundo parmetro.
Para el tercer constructor, los valores enteros que pueden ser utilizados, son las siguientes
constantes definidas en la misma clase: CENTER, LEFT y RIGHT.
El siguiente cdigo muestra la definicin y creacin de etiquetas usando los constructores
anteriores. La figura 7 muestra el resultado del cdigo.
Label lb1 = new Label ( );
lb1.setText ( "Etiqueta 1" );
Label lb2 = new Label ( "Etiqueta 2" );
Label lb3 = new Label ( "Etiqueta 3", Label.CENTER );
Label lb4 = new Label ( "Etiqueta 4", Label.LEFT );
Label lb5 = new Label ( "Etiqueta 5", Label.RIGHT );
40
Figura 7.
Tipo de retorno
int
String
Uso
Regresa el valor de alineacin de la etiqueta.
Regresa el String que corresponde a la etiqueta
Tipo de retorno
void
void
Uso
Asigna el valor del alineamiento.
Asigna la cadena a desplegar la etiqueta.
Figura 8.
Un contenedor cuenta con un conjunto de mtodos add, los cuales permiten la insercin de
otros componentes grficos en ellos. La siguiente tabla muestra las distintas versiones del
mtodo add.
Mtodo
Add(Component)
add(Component, int)
add(String, Component)
Uso
Agrega el componente al final del contenedor.
Agrega el componente al contenedor en la posicin dada
por el segundo parmetro.
Agrega el componente al contenedor con un String que se
le asocia.
41
Figura 9.
La clase Container se defini como abstracta, es decir, no puede ser instanciada. En su lugar se
utilizan las clases derivadas de sta para agregar componentes a estos. Las clases Panel y
ScrollPanel no tienen representacin grfica, pero sirven para agrupar componentes dentro de un
contenedor. La clase Window es un recuadro blanco que se despliega sobre el monitor, los objetos
de esta clase no pueden ser modificados ni en su tamao ni en su posicin.
Los objetos de la clase Frame representan ventanas de la interfaz grfica de la plataforma
donde se despliega. Tienen barra de ttulo y botones para las operaciones de maximizar,
minimizar cerrar y de control.
Los objetos de la clase Dialog representan ventanas de aviso. Su nico fin es el de presentar al
usuario mensajes relativos al sistema, o bien, solicitar informacin por este medio. Una clase
derivada es FileDialog para desplegar ventanas de archivos, y buscar archivos en la mquina
local.
Se principiar con los objetos de la clase Frame para la insercin de elementos, ya que
representan la base de desarrollo de una interfaz grfica.
5.1.6 Clase Frame
Los objetos de esta clase representan ventanas de sistema completamente funcionales, en el
sentido de que contienen una barra de ttulo, botones de maximizar, minimizar y de cerrar, las
cuales son completamente funcionales, salvo la operacin de cerrar. Es decir las ventanas en
AWT no cuentan con la opcin de cerrar, a pesar de presentar el correspondiente botn.
Los constructores de la clase Frame son los siguientes:
Frame ( ): construye una ventana de sistema que inicialmente est oculta. No presentar
ttulo alguno.
Frame ( String ): construye una ventana de sistema que inicialmente est oculta. El ttulo
que presentar es el asociado al String, que se manda como parmetro.
42
Figura 10.
Los mtodos para la recuperacin de informacin ms importantes de la clase Frame son los
que se presentan en la siguiente tabla:
Nombre
getTitle()
Tipo de retorno
String
isResizable()
boolean
setCursor(Cursor)
Void
Uso
Regresa el String que representa el ttulo de la
ventana.
Indica si el usuario puede cambiar el tamao de la
ventana.
Establece el apuntador de mouse a usarse en
esta ventana.
Para cerrar la ventana que se presenta, es necesario activar la ventana de MS-DOS que se
abri y oprimir la combinacin de teclas CTRL + C. Por otra parte se pueden usar los mtodos
setSize (nt, int) y setLocation (int, int) heredados de Componet, para establecer el tamao y
ubicacin de la ventana respectivamente. El siguiente cdigo muestra un programa completo
usando estos mtodos, y la figura 11, su despliegue correspondiente.
import java.awt.*;
public class Ventanas {
public static void main ( String arg [ ] ) {
Frame f = new Frame ( "Ventana principal" );
f.setLocation ( 50, 50 );
f.setSize ( 300, 150 );
f.setVisible ( true );
}
}
43
Figura 11.
Un objeto de la clase Frame cuenta con la capacidad de albergar otros componentes como los
que se han descrito hasta el momento. La nica excepcin es cuando se intenta agregar un
objeto de la clase Window o subclases de sta. Las reglas para insertar componentes a un
contenedor son muy simples en s. Lo primero es crear el componente a insertarse en un
contenedor y despus indicar su insercin.
Para Insertar un componente, ya sea Button o Label, en un frame, por ejemplo, se deben utilizar
los mtodos add heredados de Container. El siguiente cdigo muestra el uso de las
operaciones de insercin de componentes en un frame.
import java.awt.*;
public class Ventanas {
public static void main ( String arg [ ] ) {
Frame f = new Frame ( "Ventana principal" );
Label l = new Label ( Etiqueta );
f.add ( l );
f.setLocation ( 50, 50 );
f.setSize ( 300, 150 );
f.setVisible ( true );
}
}
Es decir, primero se crea el componente a insertar:
Label l = new Label ( Etiqueta );
Y despus se inserta en la ventana:
f.add ( l );
La figura 12 muestra la ventana con una etiqueta ya insertada.
44
Figura 12.
Figura 13.
Ahora bien, el aspecto de la interfaz que se construye depende de dos aspectos fundamentales:
el componente a insertar y el contenedor al que se insertan.
5.1.7 La clase MenuBar y otros objetos relacionados
Una barra de men slo puede incluirse en un objeto de la clase Frame. Para asignar una barra
de men, es necesario entender la relacin de la clase de objetos MenuBar con otras clases
que ayudan a implementar esta opcin, las cuales son:
CheckboxMenuItem: cada opcin de un men que slo sirve para ser marcada. Es una
subclase de MenuItem.
Menu: cada uno de los mens que se presentan sobre la barra. Es una subclase de
MenuItem.
45
Figura 14.
Para programar la barra de men de la figura 14, tiene que seguir los siguientes pasos,
considerando un objeto de la clase Frame:
1. Crear un objeto de la clase MenuBar.
2. Por cada men en la barra, crear un objeto de la clase Menu.
3. Por cada opcin de un men crear un MenuItem y agregarlo al men correspondiente.
4. Agregar los objetos de la clase Menu al objeto MenuBar.
5. Asignar el MenuBar a la ventana.
46
m1.add ( mi_02 );
m1.add ( "-" );
m1.add ( mi_03 );
La lnea 6 de este cdigo muestra la forma para aadir una lnea separadora entre los mens.
Este procedimiento es el mismo para el men Edicin.
4. Agregar los objetos de la clase Menu al objeto MenuBar.
Ya que se cuenta con los mens completos, stos deben ser agregados al objeto MenuBar del
punto 1. El siguiente cdigo muestra estas operaciones.
mb.add(m1);
mb.add(m2);
5. Asignar el MenuBar a la ventana.
Finalmente se asigna la barra de men a la ventana, tal y como se muestra en el siguiente
cdigo.
f.setMenuBar ( mb );
El cdigo completo de este ejemplo se muestra a continuacin:
import java.awt.*;
public class Menus
{
public static void main(String[] args)
{
Frame f = new Frame ( "Ventana con menus" );
f.setLocation ( 100, 100 );
f.setSize ( 400, 300 );
f.setResizable ( false );
MenuBar mb = new MenuBar ( );
Menu m1 = new Menu ( "Archivo" );
MenuItem mi_01 = new MenuItem ( "Abrir" );
MenuItem mi_02 = new MenuItem ( "Cerrar" );
MenuItem mi_03 = new MenuItem ( "Salir" );
m1.add ( mi_01 );
m1.add ( mi_02 );
m1.add ( "-" );
m1.add ( mi_03 );
Menu m2 = new Menu ( "Edicin" );
MenuItem mi_04 = new MenuItem ( "Copiar" );
MenuItem mi_05 = new MenuItem ( "Cortar" );
47
Figura 15.
48
f.add ( etiqueta1 );
f.add ( texto1 );
f.add ( etiqueta2 );
f.add ( texto2 );
f.add ( bt );
f.setVisible ( true );
}
}
Sin embargo, se carece de la programacin para que el texto se copie.
A fin de implementar dicha programacin, en el cdigo anterior se requiere entender cmo
funcionan los componentes cuando son utilizados por alguna persona. Resulta fcil intuir que la
programacin no puede estipularse de forma lineal, ya que la interaccin del usuario no es
uniforme. De aqu que se defina el concepto de evento.
Un evento resulta de la interaccin del usuario con algn elemento de la interfaz. Por ejemplo,
en un botn, un evento es activarlo; en una ventana, por su parte, un evento sera minimizarla.
La idea es que cada operacin interactiva de cualquier componente grfico, representa un
evento del mismo.
Cada lenguaje de programacin define la programacin de eventos segn su estructura y
paradigma que implemente, en el caso particular de Java los eventos son tambin clases de
objetos. En Java existen dos modelos de manejo de eventos, pero en este manual slo se
presenta el modelo delegacional, ya que viene a sustituir por completo al otro.
5.2.1 Modelo delegacional
Si usted ya ha programado interfaces grficas con otros lenguajes, seguramente se ha
encontrado que los elementos grficos manejan los eventos que producen, es decir, cada
componente tiene el conjunto de lneas asociadas a un evento dado. En el modelo
delegacional, el manejo de eventos se distribuye en tres partes:
Componentes grficos.
Eventos.
Listeners.
Los cuales se explican a continuacin.
Componentes
Son todos aquellos elementos con los cuales puede interaccionar el usuario en una interfaz
grfica, como por ejemplo botones, ventanas, cajas de texto, entre otros. Su objetivo no es el de
responder con algn cdigo, sino ms bien generar eventos.
49
Eventos
Cada que el usuario utiliza algn componente grfico, el sistema genera automticamente un
objeto que los representa. Dichos objetos representan los eventos que el usuario gener al
interaccionar con un componente. Con ellos puede recuperarse informacin sobre el evento en
s y de las condiciones en que se gener. Los objetos que representan eventos se agrupan en
el paquete java.awt.event.
Listeners
Son objetos que responden a los eventos generados por los componentes de una interfaz.
Reciben como parmetro los eventos generados por los componentes. Los listeners se agrupan
en el paquete java.awt.event.
En trminos generales, se puede resumir que los componentes grficos tienen la tarea de crear
objetos que representan eventos producidos por los usuarios. Cabe sealar que un mismo
componente puede generar ms de una clase distinta de eventos. La figura 16 muestra un
resumen de los componentes ms comunes y los eventos que producen.
Figura 16
Si bien un componente genera eventos, son los listeners, los que tienen la tarea de procesar
los eventos que los componentes generan. La idea es muy simple, un listener est atento a
que se produzca un tipo de evento a fin de responder al mismo.
Por ejemplo, un botn est representado por objetos de la clase Button, los cuales generan
objetos de la clase ActionEvent, que es cuando un usuario interacciona con l. Se requiere de
un listener para escuchar al botn, y en el momento en que se produzca, llevar a cabo alguna
programacin. Para cada clase de evento se especifica un tipo especial de listener. La figura 17
muestra algunos eventos, y los listeners que se les asocia.
50
Figura 17.
Como regla general, con sus excepciones, para cada clase de evento XXXEvent se asocia el
listener XXXListener, y los listeners en Java son interfaces, tal como se muestra en la figura 18.
Figura 18.
Las interfaces en Java establecen un patrn de funcionalidad de alguna clase que quiera
seguirlo. En una interfaz se presenta una lista de firmas de mtodos, los cuales debern ser
implementados por alguna clase que as lo requiera. En dicha lista no se especifican cuerpos de
programacin, slo encabezados. Este mecanismo no slo es til en la programacin de
eventos, pero no se presentarn ms casos en este manual.
51
Para hacer funcionar los botones de una interfaz, se requiere de un ActionListener, en otras
palabras se requiere una clase que implemente dicha interfaz. No se necesita una clase en
particular, slo que implemente la interfaz ActionListener. La especificacin de la interfaz se
muestra en la figura 19.
Figura 19.
Figura 20
Figura 21.
52
Figura 22
Algo interesante de esta tcnica es, que un componente puede registrar ms de un listener.
Para apreciar este hecho, defina una nueva clase que implemente ActionListener, tal y como se
muestra en la figura 23.
Figura 23.
En este caso, la clase EscuchaBoton2 tiene como cualidad, que para construirla requiere de
dos objetos de la clase TextField, los cuales son utilizados en el mtodo actionPerformed(). Es
decir, cuando un objeto de la clase EscuchaBoton2 detecte un evento, copiar el texto del
primer TextField al segundo. El registro de un objeto de la clase EscuchaBoto sigue las mismas
indicaciones que se presentaron anteriormente, y que se muestra en la figura 24; el efecto del
registro de dos listeners se muestra en la figura 25.
Figura 24.
Figura 25.
53
Ms an, los objetos de la clase TextField generan ActionEvent al dar un enter e ir escribiendo
en ellos. Se deja al lector registrar el objeto referido con la variable texto1 y el objeto
EscuchaBoton2 para ver dicho efecto.
Como el lector habr notado, las ventanas de Java no cierran automticamente. Esto se debe a
que no hay ningn listener registrado por la ventana. En este caso se requerir de un
WindowListener para manejar los eventos de una ventana. La figura 26 muestra la clase
EscuchaVentana que implementa dicha interfaz. En este caso son siete los mtodos que tienen
que ser incluidos.
Figura 26.
Figura 27.
54
Figura 28.
Una clase que permita que la ventana se cierre automticamente es la que se presenta en la
figura 29.
Figura 29.
Se deja al lector registrar un objeto de esta clase para que su ventana cierre automticamente.
55
6. JDBC
6.1 Introduccin
El desarrollo de aplicaciones con conexin a bases de datos es uno de los principales tipos de
programas que pueden ser desarrollados con el lenguaje de programacin Java. Java cuenta
con el API JDBC para la manipulacin de informacin en bases de datos, utilizando para ello
el estndar SQL (Structured Query Language). Cabe mencionar que el API JDBC no es la
abreviatura de algn concepto o tecnologa, pero frecuentemente se le asocia el trmino Java
DataBase Connectivity (Conectividad de Base de Datos de Java).
Este API define una serie de clases e interfaces que establecen un estndar tanto para
herramientas de desarrollo como para bases de datos. Dicho estndar permite el desarrollo de
aplicaciones 100% Pure Java, con la ventaja de que un mismo programa puede manipular una
base de datos ya sea Sybase, Oracle, Informix u otra. El JDBC permite el envo de sentencias
de SQL a casi cualquier base de datos relacional, adems de que es posible manipular los
datos de respuesta a dicha sentencia. Con esto podemos desarrollar aplicaciones que permiten
el establecimiento de servicios en lnea tanto para Intranets como en la Internet.
6.1.1 Operaciones de un programa que utiliza el JDBC
Se puede resumir en cuatro operaciones, al conjunto de acciones bsicas de los programas que
utilizan el JDBC, las cuales se listan a continuacin:
1. Cargar el controlador.
2. Establecer una conexin con la base de datos.
3. Enviar sentencias SQL al manejador de la base de datos.
4. Procesar los resultados de las consultas.
56
Resumiendo, el JDBC define las clases en Java para representar conexiones a bases de
datos, instrucciones SQL, conjuntos de resultados, metadatos de la base de datos, etc. Permite
escribir un programa en el lenguaje Java para enviar comandos de SQL y procesar los
resultados de los mismos.
El API del JDBC se implementa va un controlador y puede soportar mltiples controladores
de conexin a distintas bases de datos. Los controladores de JDBC pueden ser escritos en
Java a fin de que puedan ser integrados como parte de un applet, o bien pueden ser
implementados usando mtodos nativos de las bases de datos para servir de puente con las
bibliotecas de acceso de datos existentes.
6.1.2 Componentes del JDBC
El JDBC incluye tres componentes para su utilizacin:
Figura 1.
57
Figura 2.
3. Controlador JDBC-Net pure Java: un controlador que traduce las llamadas de JDBC en un
protocolo de red independiente del DBMS, el cual es traducido a un protocolo DBMS por un
servidor. Este servidor de red es capaz de conectar a sus clientes a distintas bases de
datos. El protocolo especfico que se utilice depende enteramente del vendedor. En general,
esta es la alternativa ms flexible del JDBC. Es probable que todos vendedores de esta
solucin proporcionarn los productos adecuados para el desarrollo de Intranets. Ver figura 3.
Figura 3.
58
4. Controlador Native-protocol pure Java: un controlador nativo que convierte las llamadas del
JDBC en el protocolo de red usado por la directiva del DBMS. Esto permite una llamada
directa del equipo cliente al servidor del DBMS, solucin prctica para Intranet. Ya que
muchos de estos protocolos son propietarios, los vendedores de stos son los mismos que
los vendedores de los controladores. Ver figura 4.
Figura 4.
59
Figura 5.
2. Seleccione el botn Add para agregar un nuevo recurso de base de datos, por lo que
aparecer la ventana que se muestra en la figura 6.
Figura 6.
60
Figura 7.
4. Cree una nueva base de datos con el botn Create y asigne el nombre de un archivo con
extensin .mdb en un directorio, para esto utilice la ventana de la figura 8.
Figura 8.
Al final de estos pasos, su base de datos debe estar listada en la ventana original de la figura 6.
6.2.2 Estableciendo una conexin de base de datos
Lo primero que se requiere para utilizar el JDBC es establecer una conexin a la base de datos.
Esto es un procedimiento de dos pasos. Se debe cargar el controlador del JDBC y entonces
establecer la conexin. Cargar un controlador de JDBC es muy simple, slo toma una lnea de
cdigo.
La siguiente lnea muestra como cargar el controlador:
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Cuando se llama al mtodo Class.forName( ), se crea una instancia del controlador que registra
el DriverManager.
61
Despus de que se carg el controlador, para establecer una conexin, se llama al mtodo
esttico DriverManager.getConnection( ), el cual regresa una conexin a la base. La firma de
este ltimo mtodo es la siguiente:
public static synchronized Connection getConnection(String url,
String user, String password) throws SQLException
El primer parmetro es el URL que seala la base de datos. En el caso del JDBC-ODBC bridge
tiene la siguiente estructura: jdbc:odbc:NombreDelRecurso, donde el nombre del recurso es
el nombre de la base de datos que se configur en el administrador del ODBC de Windows. En
el caso de la seccin anterior, el URL queda como jdbc:odbc:PruebaODBC. Los otros dos
parmetros se explican por s solos.
El siguiente cdigo es un ejemplo para establecer una conexin a esta base de datos:
Connection con = DriverManager.getConnection(jdbc:odbc:PruebaODBC,alex,alex123);
6.2.3 Usando comandos bsicos de SQL
Una vez que se cuenta con una conexin a la base de datos, debe crearse un objeto de la clase
Statement. Para crear dicho objeto se debe utilizar el mtodo Connection.createStatement( ).
Este ltimo, como objeto Statement del JDBC, se utilizar para enviar sentencias de SQL a la
base de datos.
La siguiente lnea muestra cmo crear una sentencia:
Statement stmt = con.createStatement( );
Creando tablas
Lo primero por hacer, ser crear las tablas de la base de datos, las cuales se utilizarn para los
ejemplos posteriores. El ejemplo 2 muestra la tarea de crear una tabla.
import java.sql.*;
public class CreateTableApp
{
public void createTable( ) {
Connection con = null;
try {
// Cargando el controlador
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Estableciendo la conexin con la Base de datos
con = DriverManager.getConnection("jdbc:odbc:PruebaODBC","","");
// Creando un Statement
Statement stmt = con.createStatement();
// Uso del Statement creado para CREAR la tabla titulos
stmt.executeUpdate("CREATE TABLE titulos " +
62
63
import java.sql.*;
public class InsertDataApp{
public InsertDataApp() {
}
public void insertData() {
Connection con = null;
try {
// Cargando el controlador
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Estableciendo la conexin con la Base de datos
con = DriverManager.getConnection("jdbc:odbc:PruebaODBC","","");
// Creando un Statement
Statement stmt = con.createStatement();
// Uso del Statement creado para insertar datos a la tabla titulos
stmt.executeUpdate("INSERT INTO titulos " +
"VALUES (0, 'Estudio de ecuaciones', 2)");
stmt.executeUpdate("INSERT INTO titulos " +
"VALUES (1, 'TOO: Ejemplos y casos practicos', 4)");
stmt.executeUpdate("INSERT INTO titulos " +
"VALUES (2, 'Analisis de mercados', 10)");
stmt.executeUpdate("INSERT INTO titulos " +
"VALUES (3, 'Generadores y alternadores', 3)");
stmt.executeUpdate("INSERT INTO titulos " +
"VALUES (4, 'Tanques y compresoras Diesel', 2)");
}
catch(SQLException sqle) {
System.err.println(sqle.getMessage());
}
catch(ClassNotFoundException cnfe) {
System.err.println(cnfe.getMessage());
}
finally {
try
{
if(con != null)
{
// Cerrar la conexin
con.close();
}
}
catch(SQLException sqle)
{
System.err.println(sqle.getMessage());
}
64
}
}
public static void main(String arg[]) {
InsertDataApp ida = new InsertDataApp();
ida.insertData();
}
}
Ejemplo 3.
La aplicacin InsertDataApp usa el mismo mtodo que se utiliz para crear tablas. El nico
cambio se efectu en la cadena SQL que se le pas al mtodo, usando una sentencia INSERT
de SQL en su lugar.
Realizando consultas a una tabla
La instruccin ms utilizada del SQL es el SELECT. Dicha instruccin da la posibilidad de
explorar el contenido de las tablas en una base de datos. En el ejemplo 4 se muestra una
aplicacin que con los datos que contiene la tabla titulos.
import java.sql.*;
public class SelectDataApp{
public SelectDataApp() {
}
public void selectData( ) {
Connection con = null;
try {
// Cargando el controlador
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Estableciendo la conexin con la Base de datos
con = DriverManager.getConnection("jdbc:odbc:PruebaODBC","","");
// Creando un Statement
Statement stmt = con.createStatement();
// Uso del Statement creado para sleccionar datos de la tabla
// titulos
ResultSet rs = stmt.executeQuery("SELECT * FROM titulos");
// Iterando sobre el objeto ResultSet
while(rs.next()) {
System.out.println("ID: " + rs.getString("tit_id"));
System.out.println("NOMBRE: " + rs.getString("tit_nombre"));
System.out.println("CANTIDAD: " + rs.getString("cantidad")+"\n");
}
// Cerrando ResultSet
rs.close();
65
}
catch(SQLException sqle) {
System.err.println(sqle.getMessage());
}
catch(ClassNotFoundException cnfe) {
System.err.println(cnfe.getMessage());
}
finally {
try {
if(con != null)
{
// Cerrar la conexin
con.close();
}
}
catch(SQLException sqle) {
System.err.println(sqle.getMessage());
}
}
}
public static void main(String arg[]) {
SelectDataApp cta = new SelectDataApp();
cta.selectData();
}
}
Ejemplo 4.
Para efectuar una consulta se vuelve a utilizar el objeto Statement como se vena llevando a
cabo en los ejemplos anteriores. La diferencia es el uso de un nuevo mtodo executeQuery().
Su firma es la siguiente:
public ResultSet executeQuery(String sql) throws SQLException
Como se puede apreciar, el mtodo devuelve un objeto ResultSet , el cual regresa una
coleccin de renglones, resultado de la consulta. El mtodo ResultSet.next() regresa un
boolean que indica si existe todava una columna como resultado de la consulta efectuada. El
mtodo ResultSet.getString() regresa la versin de cadena de un campo dado, que se le pasa
como parmetro.
El resultado de esta aplicacin puede apreciarse en la figura 9.
Figura 9.
66
BIBLIOGRAFA
Effective Java Programming Language Guide.
Joshua Bloch.
Addison Wesley Professional.
1 edicin, junio de 2001.
ISBN: 0201310058
Java in a Nutshell, Fourth Edition.
David Flanagan.
O'Reilly & Associates
4 edicin, marzo de 2002.
ISBN: 0596002831
Sams Teach Yourself Java 2 Platform in 21 Days, Professional Reference Edition.
Laura Lemay, Rogers Cadenhead.
Editorial Sams.
Edicin de CD-ROM, enero de 1999.
ISBN: 067231438X
67
68
Si se declaran dos referencias a objetos Circulo y son creados los objetos, como se muestra en
los ejemplos A.2 y A.3, c y d estn en capacidad para manipular los datos de cada uno de
objetos a los que hacen referencia respectivamente, por ejemplo, cada objeto puede ejecutar el
mtodo rea, como se muestra en el ejemplo A.4:
c.area();
d.area();
Ejemplo A.4
La pregunta ser entonces la siguiente: Cmo sabe el mtodo area( ) a qu valor de r llamar?
Observe que tanto el objeto al que c hace referencia como al de d tienen el atributo r. La
respuesta es simple: utilizar el valor r del objeto que mand a ejecutar dicho mtodo.
Recuerde que en la Programacin Orientada a Objetos primero estn los objetos como la base
del desarrollo de aplicaciones, y stas manipulan los datos de esos objetos. Ahora vea cmo
funcionan los objetos.
Los objetos, cuando se crean, manipulan y utilizan los datos y mtodos que se definieron para
ellos. Cuando se crean, cada uno de ellos, se les da estos elementos. Observe la figura A.1, c
hace referencia a un objeto Circulo que tiene su propio juego de datos y mtodos. Esto pasa
igual con d.
69
Figura A. 1.
Conteste por fin la pregunta. Como cada objeto de la clase Circulo tiene su propio juego de
mtodos, stos tratarn de manipular los datos del propio objeto, no los de otros. As, cuando a
travs de la referencia d ejecuta el mtodo area( ), se utiliza el dato r del mismo objeto, lo
mismo que con c.
70
En este ejemplo, la clase Circulo define tres variables de instancia9: x, y y r. Cada instancia de
la clase alberga su propio conjunto de variables, las cuales son ajenas a las de otros objetos.
Sin embargo en algunos casos es necesario contar con variables globales, pero Java no
maneja las variables globales.
Por regla, toda variable debe ser declarada dentro de una clase. Con el uso de la palabra
reservada static se indica que dicha variable es una variable de clase, y no por el contrario una
variable de instancia. Con esto se logra que exista una, y slo una variable, la cual est
asociada a la clase. El efecto es que una variable declarada como static existe slo una vez a
pesar del nmero de instancias que de la clase se hayan creado en un momento dado.
En el presente caso, la variable cir_cread se incrementa en una unidad cada vez que se crea un
crculo. Esto podra servir para conocer el nmero de objetos creados en un momento dado.
71
72
73
74
Este atributo es requerido y da el nombre del archivo que contiene el applet compilado. Este
archivo es relativo al URL base del applet. No puede ser absoluto. CODE u OBJECT deben
estar presentes.
OBJECT = serializedApplet
Este atributo da el nombre del archivo que contiene una representacin seriada de un applet. El
applet se definir en serie. El mtodo init() no ser invocado; pero su mtodo start() si lo har.
CODE u OBJECT debern estar presentes.
ALT = alternateText
Este atributo opcional especifica cualquier texto que ser desplegado, si el navegador no
entiende la etiqueta APPLET, pero no se ejecutarn los applets de Java.
NAME = appletInstanceName
Este atributo es opcional y especifica un nombre para la instancia del applet, lo cual permite a
los applets de la misma pgina encontrar y comunicarse con los dems.
WIDTH = pixeles HEIGHT = pixeles
Estos atributos son requeridos y dan el ancho y largo (en pixeles) del rea, donde se
desplegar el applet, sin interesar ventanas o cajas de dilogo en que se incluyan.
ALIGN = alignment
Este atributo opcional especifica el alineamiento del applet. Los valores posibles de este
atributo son los mismos que para la etiqueta IMG: left, right, top, texttop, middle, absmiddle,
baseline, bottom, absbottom.
VSPACE = pixeles HSPACE = pixeles
Este atributo es opcional y especifica el nmero de pixeles por arriba y por debajo del applet
(VSPACE), y de cada lado del applet (HSPACE). Son tratados de la misma forma como los
atributos de la etiqueta IMG: VSPACE y HSPACE.
<PARAM NAME = appletAttribute1 VALUE = valor>
<PARAM NAME = appletAttribute2 VALUE = valor> . . .
Con esta etiqueta se especifica un atributo especfico del applet. Los applets recuperan estos
atributos con el mtodo getParameter().
75