Seminario de Programación Orientada a Objetos

El Lenguaje de Programación Java Jimmy Vélez Muñoz jvelez@usb.edu.co

Contenido del Seminario
Introducción y Fundamentos de Java Los Primeros Pasos en Java El Lenguaje de Programación Java: Parte 1 Java en el Lado del Cliente (Applets) El Lenguaje de Programación Java: Parte II Acceso a Bases de Datos con Java: JDBC Java en el Lado del Servidor (Servlets)

Objetivos
Conocer los principios fundamentales de la programación orientada a objetos con el Lenguaje Java. Preparar a los participantes en el desarrollo de aplicaciones Java que accesan bases de datos. Entender los fundamentos del desarrollo de aplicaciones Java, tanto en el lado del cliente como en el lado del servidor.

INTRODUCCIÓN Y FUNDAMENTOS DE JAVA

Origenes del Lenguaje Java
Proyecto “Green” financiado por SUN Microsystems en 1991. James Gosling crea el lenguaje OAK, basado en características de C y C++. El nombre se cambia de OAK a JAVA, ya que existía otro lenguaje con ese nombre.

Origenes del Lenguaje Java
El nombre JAVA (Como se le conoce al café en inglés) se pone por sugerencia de un empleado de SUN. En 1992 el proyecto Green se ve en problemas. En 1993 la explosión de la WWW fue el caldo de cultivo de JAVA.

Origenes del Lenguaje Java
JAVA fue diseñado para aumentar el potencial de la WWW y en el mes de Mayo de 1995 se hace su lanzamiento oficial.

Qué es JAVA?
Java es fundamentalmente una nueva forma de computación, basada en el poder de las redes y en la idea de que el mismo software puede correr en diferentes tipos de máquinas y sistemas operativos.

Por qué Java es Importante?
Java permite realizar cosas que antes eran impensables:
Los usuarios pueden accesar información remotamente de una forma segura por medio de un Browser e Internet. Aumento del uso de la computación distribuida. Desarrollo de componentes. Industrialización del proceso de desarrollo de software.

Cómo trabaja la plataforma Java?
Los programas escritos en JAVA corren en muchas plataformas distintas gracias a la “JVM” o Java Virtual Machine.

Cómo trabaja la plataforma Java?

El software de Java está embebido en el dispositivo o se encuentra en el disco del computador. El software contiene una interfaz de usuario para la ejecución de ordenes. La JVM interpreta las instrucciones del software escrito en JAVA y las ejecuta. El SO brinda el soporte a la JVM para realizar las operaciones.

Características del Lenguaje Java
Portable

Simple

Interpretado

Orientado a Objetos

Seguro

Dinámico

Multihilo

Java es Simple
La concepción del Lenguaje fue simple desde su inicio. Este lenguaje oculta toda la dificultad que trae programar con otros lenguajes como el C++ y el uso de punteros.

Java es Orientado a Objetos
Java es un lenguaje que utiliza todas las características de los lenguajes orientados a objetos:
Clases Objetos Encapsulamiento Herencia Polimorfismo

Java es Portable
Java es portable gracias a su Máquina Virtual. El compilador de Java genera código transportable entre diferentes plataformas (bytecode).
Windows 9x
Código Fuente (.java)

Windows NT

Compilador de Java

Unix/Linux
ByteCode (.class)

Interpretadores del ByteCode

Java es Interpretado
La máquina virtual de Java Interpreta el bytecode generado por el compilador. La lenta ejecución de los programas y applets escritos en Java se debe en gran parte a este proceso. Sin embargo la potencialidad que tiene Java se debe a su carácter interpretado.

Java es Seguro
El diseño de la seguridad es un asunto crucial en el desarrollo de aplicaciones distribuidas. Hay cuatro aspectos de seguridad que Java tiene en cuenta:
Políticas de Seguridad Privacidad Autenticación Seguridad

Java es Dinámico
Java remueve el manejo de memoria dinámica del programador. Para Java el manejo de objetos se hace por medio de referencias a estos. El programador no debe preocuparse por reservar o liberar memoria. Existe un colector de basura que lo hace todo por usted.

Java es Multihilo
Los programas, especialmente los programas de PC, son usualmente programas de un solo hilo. La CPU no puede actualizar la pantalla y hacer lectura y escritura en el disco al mismo tiempo. Java brinda el soporte para ejecutar varios hilos (procesos) al tiempo.

Beneficios del Lenguaje Java
Es un lenguaje óptimo para Internet. No permite el uso de variables globales, ya que el único espacio global es la jerarquía de clases. No utiliza punteros. Implementa un recolector de basura. No tiene un preprocesador como el de Cy C++. Conjunto de clases núcleo para el manejo de redes, cadenas, hilos, errores, etc.

Usos del Lenguaje Java
Servidores de aplicaciones Herramientas de desarrollo Conectividad de Bases de Datos Comercio Electrónico Entretenimiento Servicios Financieros Salud Manufactura Multimedia Administración de redes Generadores de reportes Administración de Sistemas Telecomunicaciones Servidores WEB

Java vs. otros Lenguajes a Objetos
Simple OO Robusto Seguro Interpretado Dinámico Portable Neutral Multihilo Rec. Basura Excepciones Rendimiento Java Sí Sí Sí Sí Sí Sí Sí Sí Sí Sí Sí Alto SmallTalk Sí Sí Sí Regular Sí Sí Regular Regular No Sí Sí Medio Perl Regular Sí Sí Sí Sí Sí No Sí Sí No Sí Medio C Regular No No No No No Regular No No No No Muy Alto C++ No Regular Sí Sí No No Regular No No No Sí Muy Alto

Recursos de Java en Internet
www.javasoft.com www.javalobby.org www.javaworld.com www.javareport.com www.jars.com www.developer.com www.sys-con.com/java www.sun.com www.servlets.com

LOS PRIMEROS PASOS EN JAVA
El Java Developer Kit (JDK), La API de Java, Tipos de Aplicaciones, etc.

El Java Developer Kit (JDK)
El Kit de Desarrollo de Java, es un conjunto de herramientas básicas que proporcionan entre otras cosas, un interpretador de java, un compilador, un descompilador, un generador automático de documentación en html, etc. Actualmente ya hay entornos de desarrollo integrados completos para Java, diferentes del JDK de Sun. Symantec, Symantec Café. Borland, JBuilder. Sun, Java WorkShop. Microsoft, Visual J++. IBM, VisualAge for Java, etc.

Tipos de Aplicaciones en Java
Java Applets Aplicaciones Standalone Paquetes Java Servlets JavaBeans

Java Applets
Son miniaplicaciones que se ejecutan por medio de un Browser, a través de una página HTML.
Petición de la Página

<html> ... <applet ....> </html>

Aplicaciones Standalone
Estos aplicactivos de Java no necesitan un browser para ser ejecutados Estas aplicaciones se ejecutan con la ayuda de la máquina virtual de Java.

Paquetes
Un paquete en Java es un conjunto de clases que guardan un propósito común. Estos paquetes se encuentran constituidos en archivos que normalmente están comprimidos en zip, jar, etc.

Paquete java.awt

Paquete java.net

Java Servlets
Un servlet de Java es una aplicación que se ejecuta en el servidor. Esta aplicación no viaja hasta el cliente para ser interpretada por la máquina virtual del navegador. Por el contrario el servlet lo interpreta la máquina virtual del servidor.

JavaBeans
Los JavaBeans son componentes de software reutilizables que pueden unirse visualmente en otros componentes, applets, aplicaciones y servlets, utilizando herramientas visuales de desarrollo. Una herramienta de desarrollo que soporte JavaBeans, mantiene los Beans en un paleta o caja de herramientas. Se puede seleccionar un Bean de la paleta, arrastarlo dentro de un formulario, modificar su apariencia y su comportamiento, definir su interacción con otros Beans, y componer un applet, una aplicación, o un nuevo Bean, junto con otros Beans. Todo esto se puede hacer sin escribir una línea de código.

Instalación del Kit de Desarrollo de Java
JDK1.3 (Java 2), necesita de 60 MB de espacio en disco. La variable CLASSPATH, se requiere para que el compilador encuentre los paquetes y las clases que usamos en nuestros programas. Es recomendable poner en el PATH del sistema la ruta donde se encuentra instalado el compilador y las herramientas de Java, para que puedan ser invocadas desde cualquier lugar.

La API de Java
La Interfaz de Programa de Aplicación de JAVA, o API, es un conjunto de clases desarrolladas por Sun para ser usadas con el lenguaje de programación JAVA. Estas fueron diseñadas para asistir al programador en el desarrollo de sus propias clases, applets, y aplicaciones.

La API de Java
Las clases en Java se agrupan en paquetes. Entre estos paquetes tenemos:
java.lang java.corba java.awt java.applet java.io java.sql

Paquete java.lang
Este paquete consiste de clases que son el corazón del lenguaje JAVA. Este paquete incluye no sólo envolturas para los tipos de datos básicos como Integer y String, sino también la manera de manejar errores por medio de las clases Throwable y Error.

Paquete java.io
El paquete java.io sirve como la biblioteca estándar de entrada y salida para el lenguaje JAVA. Este paquete le permite un número ilimitado de posibilidades de comunicación al proporcionarle tanto tipos sencillos como la clase StringBufferInputStream o complejos como la clase RandomAccessFile.

Pauqte java.util
Este paquete es, esencialmente, una variedad de clases útiles que no pertenecen a ningún otro paquete. Entre estas clases prácticas se encuentran la clase Date, diseñada para manipular y manejar las operaciones con fechas, la clase Hashtable y los TAD’s (Tipos Abstractos de Datos), como Stack y Vector.

Paquete java.net
Ya que JAVA es un lenguaje basado en red, este relativamente pequeño paquete resulta ser muy útil. Sobre todo, le proporciona la capacidad de comunicarse con otras fuentes de información creando o conectándose a sockets o haciendo uso de los URL’s y direcciones de Internet.

Paquete java.awt
El Abstract Window Toolkit (AWT) de JAVA contiene los recursos que usted necesita para crear interfaces atractivas y útiles para sus applets. El AWT no sólo tiene herramientas de control, como el LayoutManager y Container, sino que también cuenta con herramientas interactivas concretas, como Button y TextField.

Paquete java.applet
El paquete java.applet proporciona una sola clase y tres interfaces, pero es uno de los paquetes más usados porque es la base de todos los applets. La clase Applet es de suma importancia porque es necesaria cuando se crea un applet. También es útil la interfaz AppletContext, la cual se usa para interacturar con el navegador.

Una Mínima aplicación en Java
// importamos los paquetes import java.applet.*; import java.awt.*; // la clase que se hereda de Applet public class HolaMundo extends Applet{ public void paint(Graphics contexto){ contexto.drawString("Mi Primer Applet",50,30); } }

El archivo HTML
<html> <title>Mi Primer Applet </title> <body> <h1>El applet Hola Mundo :</h1> <hr> <applet code=HolaMundo.class width=200 height=100></applet> <hr> </body> </html>

El Lenguaje de Programación Java
Parte 1: Comentarios, Palabras Reservadas, Operadores, Control de Flujo, Arreglos y Cadenas, etc.

Comentarios en Java
Comentarios de una línea:
// Este es un comentario de una sola línea

Comentarios de varias líneas:
/* Este es un comentario que tiene varias líneas */

Palabras Reservadas del Lenguaje Java
abstract case class do final future implements int new package rest super throw var boolean cast const double ninally generic import interface null private return switch throws void break catch continue else float goto inner long operator protected short synchronized transient volatile byte char default extends for if instanceof native outer public static this try while

Operadores en Java
Los operadores realizan algunas funciones en uno o dos operandos. Los operadores que requieren un operador se llaman operadores unarios. Los operadores que requieren dos operandos se llaman operadores binarios. Los operadores unarios en Java pueden utilizar la notación de prefijo o de sufijo.

Operadores en Java
Podemos encontrar los siguientes tipos:
Aritméticos Relacionales Condicionales Desplazamiento Asignación

Resumen de Operadores en Java
Tipo Aritméticos Relacionales Condicionales Desplazamiento Asignación Operadores +,-,*,/,%,++,->,>=,<,<=,==,!= &&,||,! >>,<<,>>>,&,|,^,~ +=,-=,*=,/=,%=,&=, |=,^=,<<=,>>=, >>>=

Variables y Tipos de Datos
Todas las variables en el lenguaje Java deben tener un tipo de dato. El tipo de la variable determina los valores que la variable puede contener y las operaciones que se pueden realizar con ella. Existen dos categorias de datos principales en el lenguaje Java: los tipos primitivos y los tipos referenciados. Los tipos primitivos contienen un sólo valor e incluyen los tipos como los enteros, coma flotante, los caracteres, etc...

Tipos de Datos Primitivos
Tipo byte short int long float double char boolean Tamaño 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits 16 bits 1 bit Descripción Entero 1 byte Entero corto Entero Entero largo Pres. simple Pres. doble 1 carácter true/false

Nombres de Variables
Debe ser un identificador legal de Java comprendido en una serie de caracteres Unicode. Unicode es un sistema de codificación que soporta texto escrito en distintos lenguajes humanos.Unicode perminte la codificación de 34.168 caracteres. No puede ser el mismo que una palabra clave o el nombre de un valor booleano (true or false) No deben tener el mismo nombre que otras variables cuyas declaraciones aparezcan en el mismo ámbito.

Declaración de Variables
Sintáxis:
TipoDeDato identificador=valor inicial;

Ejemplos:
int contador=0; char letra; double PI=3.141592654;

Control de Flujo
Las sentencias de control de flujo determinan el orden en que se ejecutarán las otras sentencias dentro del programa. El lenguaje Java soporta varias sentencias de control de flujo, incluyendo:
Toma de decisiones Ciclos o bucles Excepciones Rompimiento de flujo

if (ejecución condicional)
Sintáxis:
if (expresión lógica) sentencias;
expresión lógica

sentencia o bloque

if - else (ejecución condicional dicotómica)
Sintáxis:
if (expresión lógica) sentencia1; else sentencia2;
true
expresión lógica

false

sentencia1 o bloque1

sentencia2 o bloque2

switch (ejecución condicional múltiple)
Sintáxis:
switch(expresión){ case constante1: sentencia1; case constante2: sentencia2; ...... default: sentencia por defecto; }

switch (ejecución condicional múltiple)
Evaluación de la Expresión

cte1

true true

lista de sentencias 1

false

break

true true

cte2

lista de sentencias 2

break

false
default

true

lista de sentencias por default

for (iteración o bucle)
Sintáxis:
for(exp.Inicialización;exp.lógica;exp.iteración) sentencia;
Evaluación de la expresión de inicialización Expresión Lógica

false

true
sentencia o bloque

Evaluación de la expresión de iteración

while (iteración o bucle)
Sintáxis:
while(expresión lógica) sentencia;
Expresión Lógica

false

true
sentencia o bloque

do-while (iteración o bucle)
Sintáxis:
do { sentencia; } while (expresión lógica);
sentencia o bloque

Expresión Lógica

false

true

break (bifurcación incondicional)
Sintáxis:
break;
Expresión Lógica

false

true
sentencia; break;

break (bifurcación incondicional)
Sintáxis:
continue;
Expresión Lógica

false

true
sentencia; continue;

Arreglos y Cadenas de Caracteres
Un arreglo es un tipo compuesto de variables del mismo tipo. Estas variables pueden ser a su vez de tipos simples (tipos primitivos) o compuestos (objetos). Los arreglos pueden ser de una o más dimensiones, y cada dimensión se especifica con un par de corchetes.

Arreglos y Cadenas de Caracteres
Sintáxis para la declación de arreglos:
tipo identificador[]; tipo[] identificador; Ej: int numeros[];

El tamaño del arreglo se debe especificar por medio del operador new:
identificador = new tipo[tamaño]; Ej: numeros = new int[100];

El índice de un arreglo inicia desde la posición 0, y este debe ser declarado como un tipo de dato entero (int).

Arreglos y Cadenas de Caracteres
Declaración de matrices:
float matriz[][]; matriz = new float[3][2];

En este caso el primer valor de los corchetes especifica que la matriz tiene 3 filas, y el segundo valor declara que la matriz tiene 2 columnas.
Columnas Filas
(0,0) (1,0) (2,0) (0,1) (1,1) (2,1)

Arreglos y Cadenas de Caracteres
En Java las cadenas de caracteres son manejadas por la clase String. Los literales tipo cadena son en realidad instancias de la clase String. Los objetos de tipo String pueden realizar operaciones tales como determinar su longitud, trabajar con cada uno de los caracteres, extraer subcadenas, etc.

Arreglos y Cadenas de Caracteres
Sintáxis de declaración de cadenas:
String identificador="valor inicial"; Ej: String cadena="Hoy es un día frío";

Para declarar cadenas también se puede hacer uso del constructor de clase:
String cadena; cadena = new String("Hoy es un día frío");

O simplemente declararla y luego inicializarla:
String cadena; cadena = "Hoy es un día frío";

Arreglos y Cadenas de Caracteres
Operaciones sobre cadenas:
length() : devuelve la longitud de la cadena charAt(indice): devuelve el carácter en el índice equals(String): devuelve true si los String son iguales equalsIgnoreCase(String): compara ignorando mayúsculas y minúsculas. startsWith(String): devuelve true si el objeto inicia con el String especificado. endsWith(String): devuelve true si el objeto termina con el String especificado.

Arreglos y Cadenas de Caracteres
Continuación ...
indexOf(char): determina la posición de la primera ocurrencia de un carácter. substring(inicio, fin): devuelve un String de una cadena iniciando en la posición de inicio y terminando una posición antes del fin. valueOf(tipo primitivo): método estático que devuelve la cadena correspondiente al tipo que se le pase como argumento.

Ejercicios ....
Variables Control de flujo Arreglos Cadenas de caracteres

JAVA EN EL LADO DEL CLIENTE

Desarrollo de Applets

Los Applets

Un applet es un programa que corre en un navegador que sea compatible con Java. Los applets tienen restricciones para brindar una mayor seguridad.

Restricciones de los Applets

Un applet no puede cargar librerías ni definir métodos nativos. No puede leer ni escribir ficheros en el Host en el que se está ejecutando. No puede realizar conexiones en la Red, excepto con el Host del que fue cargado.

Continuación ...

No puede arrancar ningún programa en el Host donde se está ejecuando. No puede leer ciertas propiedades del sistema. Las ventanas que proporcionan los applets tienen un aspecto diferente a las de cualquier aplicación.

Capacidades de los Applets

Los Applets pueden hacer conexiones al host del que fueron cargados. Los Applets que se ejecutan dentro de un navegador Web pueden hacer que se muestren páginas HTML de una forma muy sencilla.

Continuación ...
Los Applets pueden invocar métodos públicos de otros Applets que se encuentren en la misma página. Los Applets que se han cargado desde un directorio local (desde un directorio en el CLASSPATH del usuario) no tienen ninguna restricción como los applets cargados a través de la Red. Aunque la mayoría de los applets paran su ejecución cuando el usuario abandona la página, no tienen porque hacerlo.

Ciclo de carga de un Applet
El archivo HTML es cargado. El tag <applet> es detectado. EL archivo .class es bajado desde el servidor. Las clases referenciadas por el applet son detectadas y bajadas al cliente. Son llamados los métodos init() y start(). El applet es mostrado en el browser.

Ciclo de Vida de un Applet
init(): Llamado la primera vez que el applet es cargado. start(): Llamado después del método init(), y cada vez que el browser regresa a la página en la cual el applet está contenido. stop(): Llamado cada vez que el browser deja la página Web, donde el applet está contenido. destroy(): Llamado justo antes de que el browser se cierre completamente.

La Clase Applet
App le t
(fr om a pp l e t )

s etStu b (s tub : Ap pletStu b ) : void is Active () : bo ole an g etD o cu m e ntBa s e () : U R L g etC o de Ba s e () : U R L g etPara m eter(n a m e : String ) : String g etAp ple tC on te xt() : Ap p le tC on text re s ize (w id th : in t, h eigh t : int) : vo id re s ize (d : D im en s io n) : void s ho w Sta tu s (m s g : Strin g) : vo id g etIm ag e (url : U R L) : Im a ge g etIm ag e (url : U R L, n am e : String ) : Im ag e g etAu dio C lip (url : U R L) : Aud io C lip g etAu dio C lip (url : U R L, na m e : String ) : Au dioC lip g etAp ple tInfo() : Strin g g etLo ca le () : L o cale g etPara m eterIn fo () : String [][] p la y(u rl : U R L ) : vo id p la y(u rl : U R L , n am e : Strin g) : void init() : vo id s ta rt() : void s to p() : void d es tro y() : void

Entrada de Datos desde el Applet
Para introducir datos (valores, cadenas de texto) desde el applet se utilizan campos de texto (TextField). Todos los datos digitados son capturados como cadenas de texto. Es necesario convertir estas cadenas a su correspondiente valor cuando se trata de números (flotantes, enteros, etc.).

Las Envolturas (Wrappers)
Son clases con métodos que permiten hacer conversiones entre tipos de datos. Los tipos de datos primitivos no forman parte de ninguna jerarquía de clases y se pasan por valor a los métodos. Java proporciona clases para “envolver” cada uno de los tipos primitivos transformandolos en objetos “referenciables”.

Jerarquía de Clases Number
Nu m b er
(fro m l a n g )

Long
( fr om la n g )

$ s e ria lVe rs io n U ID : lo n g = - 8 7 4 2 4 4 8 8 2 4 6 5 2 0 7 8 9 6 5 L in tVa lu e () : in t lo n g Va lu e () : lo n g flo a tVa lu e () : flo a t d o u b le Va lu e () : d o u b le b yte Va lu e () : b yte s h o rtVa lu e () : s h o rt

D o u b le
( fro m l a n g )

Fl o a t
( fro m l a n g )

In te g e r
( fr om la n g )

Byte
(fro m l a n g ) (fro m l a n g )

Sh o rt $ MIN _VAL U E : s h o rt = - 32 7 6 8 $ MAX_ VAL U E : s h o rt = 3 2 7 6 7 va lu e : s h o rt

$ MIN _ VAL U E : b yte = - 1 2 8 $ MAX_ VAL U E : b yte = 1 2 7 va lu e : b yte

Utilización de Envolturas

Crear la referencia a la envoltura:
Float NumeroFlotante;

Crear el objeto:
NumeroFlotante = new Float(3.15); NumeroFlotante = new Float("3.15");

Utilizar los métodos:
double valor = NumeroFlotante.doubleValue(); String strvalor = NumeroFlotante.toString();

Ejercicios ...

Crear una GUI. Utilizar las Envolturas.

El Paquete AWT

Abstract Window Toolkit

El paquete AWT
El AWT es un conjunto completo de elementos de interfaz de usuario que incluye ventanas, menús, botones, casillas de verificación, barras de desplazamiento, etc. Incluye el manejo de contenedores. Incluye el sistema de control de eventos. Mecanismos para distribución de componentes en la pantalla.

Jerarquía Parcial del AWT
C om po ne nt
(fro m a wt)

C an va s
(fro m a wt)

C on ta in er
( fro m awt )

TextC om po ne nt
( fro m awt )

Bu tton
(fro m a wt)

Pa ne l
( fro m a wt)

Win do w
( fro m awt )

TextFie ld
(fro m a wt)

App le t
(fro m a p p l e t)

Fram e
(fro m a wt)

D ia lo g
( fro m awt )

Componentes (La clase Component)
Un componente es un elemento gráfico que sirve de interfaz al usuario de una aplicación. A los componentes también se le llaman controles. La clase Component es una clase abstracta que define los elementos comunes de cada componente, como el color, tamaño, métodos como mostrar, manejar eventos, etc.

Algunos Métodos de Component
boolean action(Event,Object) Rectangle bounds() synchronized void disable() void enable(boolean condicion) synchronized void enable() Color getBackground() Font getFont() Color getForeground() Container getParent() boolean handleEvent(Event evt) synchronized void hide() boolean keyDown(Event evt, int key) boolean keyUp(Event evt, int key) boolean mouseDown(Event evt, int x, int y) boolean mouseDrag(Event evt, int x, int y) boolean mouseEnter(Event evt, int x, int y)

Continuación ...
boolean mouseExit(Event evt, int x, int y) boolean mouseMove(Event evt, int x, int y) boolean mouseUp(Event evt, int x, int y) void move(int x, int y) void nextFocus() void requestFocus() void setBackground(Color) void setForeground(Color) void show()

Contenedores (La clase Container)

Un contenedor es un componente que puede incluir a otros componentes (incluso a otros contenedores). Todos los contenedores del paquete awt derivan de la clase abstracta Container. Los principales contenedores son: Panel, ScrollPane, Window.

Algunos Métodos de la Clase Container
Component add(String info, Component comp) Component add(Component comp, int pos) Component add(Component comp) int countComponents() void remove(Component comp) void setLayout(LayoutManager)

Cómo añadir componentes a un contenedor?

Método add(...):
add(Componente);

Cómo distribuir los componentes en el contenedor?

Los Administradores de Diseño:
Un administrador de diseño es un objeto que controla el tamaño y posición de los componentes de un contenedor. Por defecto, todos los objetos Container tiene un objeto LayoutManager que controla su distribución. Para los objetos de la clase Panel, el controlador de disposición por defecto es un objeto de la clase FlowLayout. Para los objetos de la clase Window, el controlador de disposición por defecto es un objeto de la clase BorderLayout.

Ejemplos de los Administradores de Diseño

Tipos de Administradores de Diseño
FlowLayout BorderLayout CardLayout GridLayout GridBagLayout Administradores Definidos por el Programador Posicionamiento Absoluto

FlowLayout

Coloca los componentes en fila mientras quepan en el contenedor, en este último caso los coloca en la siguiente fila. El orden en que se ubican es según el orden en que se agreguen al contenedor. setLayout(new FlowLayout());

BorderLayout

Coloca y ajusta el tamaño de los componentes de manera que llenen completamente el contenedor. BorderLayout tiene cinco áreas: North, South, East, West, y Center. setLayout(new BorderLayout()); Para adicionar los componentes:
add("North",botonOk);

CardLayout
CardLayout ayuda a manejar dos o más componentes (normalmente ejemplares de la clase Panel) que comparten el mismo espacio. Cada componente tiene un CardLayout que lo maneja como si jugaran a cartas o las colocaran en una pila, donde sólo es visible la carta superior. Se puede elegir la carta que se está mostrando.

Continuación ...

setLayout(new CardLayout()); Para adicionar el componente:
add("nombre", componente);

Para moverse entre los componentes:
public void first(Container parent) public void next(Container parent) public void previous(Container parent) public void last(Container parent) public void show(Container parent, String name)

GridLayout

Coloca los componentes en filas y columnas según el método constructor elegido y los parámetros especificados. Constructores:
public GridLayout(int rows, int columns) public GridLayout(int rows, int columns, int horizontalGap, int verticalGap) setLayout(new GridLayout(2,3));

GridBagLayout
Es el más flexible de los administradores de diseño. En este administrador los componentes no están restringidos a celdas e incluso pueden ocupar más de una celda. Las características y restricciones para cada componente que se agregará al contenedor con este layout se especifican por medio de un objeto GridBagConstrains

Posicionamiento Absoluto

Los componentes se pueden ubicar de la forma que lo determine el programador, sin necesidad de utilizar un administrador de diseño

Continuación ...

Se pone el administrador en null:
setLayout(null);

Se adicionan los componentes:
add(botonOK);

Se ubican y se dimensionan:
botonOk.reshape(x,y,ancho,alto);

Los Componentes del AWT
Clases:
Button Checkbox Choice Label List Scrollbar Canvas TextField Panel TextArea

Button: Botones de Acción

Constructores:
Button() Button(String)

Métodos:
String getLabel() void setLabel(String)

Label: Etiquetas de Texto

Constructores:
Label() Label(String) Label(String, int)

Métodos:
getText() setText(String) getAlignment() setAlignment(int)

Label.RIGHT, Label.LEFT, Label.CENTER

Checkbox: Casillas de Verificación y Botones de Radio

Constructores:
Checkbox() Checkbox(String) Checkbox(String,CheckboxGroup,boolean)

Métodos:
String getLabel() void setLabel(String) boolean getState() void setState(boolean)

TextField: Campos de Texto

Constructores:
TextField(int) TextField(String,int)

Métodos:
void setEchoCharacter(char) String getText() void setText(String) int getColumns() void Select(int,int) void SelectAll() void setEditable(boolean)

Choice: Combos de Selección

Constructores:
Choice()

Métodos:
void addItem(String) int countItems() String getItem(int) int getSelectedIndex() String getSelectedItem() void select(String) void select(int)

List: Listas de Selección

Constructores:
List() List(int filas, boolean multipleselección)

Métodos:
addItem(String, int pos) addItem(String) void clear() int countItems() String getItem(int pos) void delItem(int pos) int getSelectedIndex()

Continuación ...

Métodos:
int[] getSelectedIndexes() String getSelectedItem() String[] getSelectedItems() void select(int pos)

Panel: Objeto Contenedor

Constructor:
Panel()

Crear el Panel:
Panel panel1; panel1 = new Panel();

Adicionar componentes:
panel1.add(Component);

TextArea: Areas de Texto

Constructores:
TextArea() TextArea(int filas, int columnas) Textarea(String, int filas, int columnas) TextArea(String)

Métodos:
void appendText(String) int getColumns() int getRows() void replaceText(string, int inicio, int fin)

Ejercicios ...

Manejo de Componentes. Administradores de Diseño.

MANIPULACION DE EVENTOS

El Ratón y el Teclado

Programación con Eventos
Interfaces Gráficas de Usuario (GUI) como generadoras de eventos. Los objetos esperan a que ocurran eventos para "actuar" de manera específica. El flujo de control del programa ya no es secuencial, sino más bien interacciones entre agentes externos a la palicación con los objetos de software.

Modelos de Manipulación de Eventos

El modelo por herencia. El modelo por delegación.

El Modelo por Herencia

Aprovecha la jerarquía de clases para tener clases especializadas en manejar eventos. Mientras que el método de la clase que maneja los eventos, no indique que se procese el evento, este subirá por el árbol de objetos, hasta que algún objeto lo detecte y lo procese.

Continuación ...
Versiones anteriores a java 1.1 utilizan este modelo para manejar los eventos. Sólo subclases de Component manejan eventos sobreescribiendo el método action(), para botones y los otros componentes, y handleEvent() para las barras de desplazamiento. El retorno de "true" termina de procesar el evento, mientras que "false" sigue propagando el evento.

Continuación ...

En este modelo los eventos son entregados a los componentes, sin importar que puedan ser manejados o no. Por este motivo NO es el modelo más adecuado para manejar eventos.

Continuación ...
Area de Texto

Panel

Botón

Continuación ...

El Modelo por Delegación
A partir de la versión 1.1 de Java, se reemplaza el modelo de herencia. En el modelo por delegación, objetos de cualquier tipo pueden registrarse como sensibles a eventos (Listeners) realizados sobre otros objetos fuente. Las propiedades del evento (Event), son propagadas del objeto fuente al Listener mediante una llamada a un método del Listener.

Continuación ...

Es el objeto fuente quien recibe directamente el evento de un agente externo y verifica si "es de interés" de uno o más Listeners. Se crea un objeto evento y llama al método apropiado de cada Listener "interesado" para pasarle el evento.

Continuación ...

Algunos Tipos de Listeners
Tipos
WindowListener MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener ActionListener

Descripción
Eventos con las ventanas (cerrar una ventana) Eventos al presionar el mouse sobre componentes Movimiento del Mouse sobre componentes Ocultamiento o visibilidad de los componentes El componente obtiene el foco Selección de items de tablas o listas Clicks sobre botones, Enter sobre campos, etc.

Ejemplo de ActionListener
import java.awt.*; import java.applet.*; import java.awt.event.*; public class Beeper extends Applet implements ActionListener { Button button; TextField campo; public void init() { button = new Button("Click Me"); campo = new TextField(50); add(button); add(campo); campo.setEditable(false); button.addActionListener(this); } public void actionPerformed(ActionEvent e) { if (e.getSource() == button) campo.setText("Se Presionó el Botón"); } }

Ejemplo de MouseListener
public class MouseEventDemo ... implements MouseListener { ...//where initialization occurs: //Register for mouse events on blankArea and applet (panel). blankArea.addMouseListener(this); addMouseListener(this); ... public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; # of clicks: " + e.getClickCount(), e); } ...

Ejercicios ...

Eventos por Herencia. Eventos por Delegación.

EL LENGUAJE DE PROGRAMACION JAVA PARTE II

Clases, Objetos, Métodos,Interfaces, ...

Clases en Java

Las clases permiten definir la estructura y comportamiento que van a tener los objetos. Declaración:
Modificador class NombreClase extends NombreSuperClase implemets NombreInterface { Variables; métodos; }

Lo subrayado es opcional.

Modificadores
public: La clase se puede accesar por fuera del paquete en que se encuentra. final: La clase no puede ser una superclase. abstract: La clase solo tiene la declaración de los métodos pero no están implementados aun. No se permite crear instancias de este tipo de clases.

Variables de Instancia

Las variables de instancia son aquellas que se encuentran declaradas dentro de la clase. Estas variables pueden ser declaradas a partir de los tipos primitivos o a partir de otras clases.

Métodos

Los métodos son las operaciones que denotan el comportamiento de los objetos del tipo de clase. Declaración:
EspecificadorDeAcceso Modificador TipoRetorno NombreMétodo (parámetros) throws ListaExcepciones

Lo subrayado es opcional.

Especificadores de Acceso
Sirven para restringir el acceso a un método.
public: El método puede ser accesado por todas las clases sin importar su jerarquía o su paquete. protected: El método solo puede ser accesado por las clases del paquete actual. Pero no por otras clases de otro paquete. friendly: Métodos accesibles a la clase actual y a clases que se hereden de esta clase. private: Solo pueden ser vistas dentro de la misma clase. private protected: se puede accesar por la clase y cualquier subclase pero no al resto del paquete ni a ninguna clase por fuera del paquete.

Modificadores de Acceso
Permiten establecer las propiedades de un método, tales como donde será visible y como las subclases de la clase interactuarán con este.
static: Los métodos y variables se comparten para las diferentes instancias de la clase. abstract: métodos declarados pero no implementados en la clase. final: Cuando se usa permite que los métodos de una clase no sean redefinidas en las subclases. native: Métodos que se quieren usar pero que no están escritos en java. Synchronized: Método sincronizado para el manejo de hilos.

Invocación de Métodos

Para invocar un método de un objeto se necesita especificar:
A qué objeto pertenece el método. Qué método es el que se invocara. Los parámetros requeridos por el método.

Para la invocación de métodos se utiliza el operador punto (.) Objeto.método(parámetros);

Clases Abstractas en Java
Una clase abstracta es aquella clase que define uno o más métodos abstractos. Las clases abstractas no se pueden instanciar. Un método abstracto se declara pero no se implementa. Este método se debe implementar en las clases derivadas. Para su definición se utiliza la palabra reservada abstract.

El Constructor de Clase
Es un método de clase que tiene el mismo nombre de la clase. Este método es utilizado para inicializar las variables de instancia de la clase. El método constructor es invocado automáticamente al crear instancias de la clase con el operador new. El constructor no puede retornar valores.

Creación de Objetos

Para crear un objeto de una clase y tener una variable de referencia se utiliza el operador new. Sintaxis:
NombreClase objeto=new NombreClase();

Ejemplo:
Circulo objetocirculo = new Circulo();

Herencia de Clases

Para utilizar herencia se necesita definir una clase base o superclase y una clase derivada que se extienda de la superclase. Esquema general:
class superclase { ... } class derivada extends superclase { ... }

Continuación ...

La real potencia de la herencia no es solo el hecho de adquisición de propiedades y métodos de la superclase, sino la facilidad de “especializar” la subclase con métodos y propiedades adicionales. En el caso de los métodos se permitirá redefinir los heredados (polimorfismo).

Sobreescritura de Métodos
Los métodos pueden sobreescribirse en cada una de las subclases de una superclase, de manera que cuando sea invocado, se ejecute de acuerdo a la subclase del objeto en la invocación. En algunos casos es necesario hacer referencia a las métodos de la superclase, en estos casos es necesario utilizar (this y super).

Sobrecarga de Métodos

Los métodos dentro de una misma clase pueden llamarse con el mismo nombre. La diferencia debe encontrarse en los parámetros. Esta diferenciación puede estar en los tipos de datos, la cantidad o el orden de los parámetros.

Interfaces

Una Interface es una clase que define un conjunto de métodos, pero no los implementa. Una clase que implementa la interface cumple con implementar todos los métodos de la interface para agregar algún comportamiento.

Ejercicios ...

Declaración de Clases. Herencia de Clases. Polimorfismo. Clases Abstractas.

Introducción a las Bases de Datos Relacionales
Conceptos Básicos

Bases de Datos
Una base de datos es un conjunto de datos organizados de tal manera que facilite la extracción de información. El DBMS es el conjunto de herramientas de software que administra el acceso a los datos, permitiendo su almacenamiento, consulta y actualización.

Plataforma Cliente Servidor
Cliente/servidor implica distribución de aplicaciones y/o datos en una red de computadoras. Componentes:
Cliente (presentación y GUI) Servidor (DBMS,WEB,GroupWare) Middleware (software que corre tanto en el cliente como en el servidor. Protocolos de transporte, Sistema operativo de red, Servicios)

Componentes Cliente/Servidor
Cliente
Servicios ODBC, JDBC,HTTP Transporte TCP/IP OS

DBMS

Middleware

Modelo Relacional
Es un modelo de datos basado en dos teorías matemáticas: La teoría de relaciones y la Lógica de predicados de primer orden. Presentado por Codd en 1970. Este modelo presenta una estructura y reglas de integridad.

Estructura del Modelo ER
Los datos son agrupados como relaciones de datos y se representan en forma de tablas, donde cada fila corresponde a una tupla y cada columna representa un dominio. Dominio: conjunto de valores que puede tomar el dato. Cada dato es atómico.

Operaciones Relacionales
Restricción o Selección. Proyección. Producto cartesiano. Unión. Diferencia. Intersección. Conjunción o Join Relacional. Asignación, Inserción, Eliminación y Actualización.

Diseño de Bases de Datos
Dos etapas en el diseño:
Diseño lógico. Diseño físico.

El diseño lógico es independiente de la tecnología a utilizar El diseño físico es la implementacion del diseño lógico en una tecnología de bases de datos particular.

Modelamiento E/R
El modelamiento de datos es la principal técnica para el diseño lógico de datos. Compuesto por:
Entidades. Datos de las entidades. Reglas del negocio (interrelaciones). Cardinalidad de las interrelaciones.

Diagrama E/R

Persona Depto #Cédula *Nombre *Dirección oTeléfono
Pertenece Conformado

#ID *Nombre

Controlado por

Controla

Integridad del Modelo
La integridad referencial permite definir relaciones entre tablas a través de los valores de los datos (columnas) de estas tablas. Integridad de entidad. Integridad referencial. Integridad de columna. Integridad de usuario.

SQL: Structured Query Languaje
Es un lenguaje interactivo que permite realizar consultas y actualización a bases de datos. Este leguaje puede ser embebido en lenguajes como C,C++, COBOL o JAVA. Lenguaje de Definición de Datos (DDL) Lenguaje de Manipulación de Datos (DML) Lenguaje de Control de Datos (DCL)

SQL: DDL
Sentencias:
Create Drop Alter

Create:
create table NombreTabla (NombreColumna tipo modificadores, ...)

SQL: DML
Sentencias:
Select Insert Update Delete

SQL: DML
Select:
select NombreColumna, ... from NombreTabla where Condición

Insert:
insert into NombreTabla (NombreColumna, ...) values (valor, ...)

SQL: DML
Update:
update NombreTabla set NombreColumna=valor ... where NombreColumna = valor

Delete:
delete from NombreTabla where NombreColumna = valor

SQL: DCL
Sentencias:
Grant Revoke Commit RollBack

El ResultSet
Son las filas que satisfacen el resultado de una consulta (query). El numero de filas retornadas en un result set puede ser igual a cero, una o muchas. El acceso a las filas de datos se hace una por una, y de esto se encargan los cursores. Muchos DBMS crean cursores automáticamente cuando el conjunto de resultados es generado.

Transacción
Una transacción es un conjunto de una o más sentencias SQL, que en conjunto hacen una unidad lógica de trabajo. Una transacción termina cuando se hace un commit o un rollback, dependiendo de si se los SQL se efectuaron con o sin éxito.

Procedimiento Almacenado
Un procedimiento almacenado es un conjunto de sentencias SQL que pueden ser llamadas bajo un nombre. EL DBMS compila el procedimiento antes de almacenarlo, y no es recompilado en su ejecución, mejorando así el desempeño de su ejecución.

Metadatos
Usualmente guardamos datos en la base de datos que hacen referencia a los hechos de la vida del negocio. Para almacenar esos datos es necesario que la base de datos tenga en su interior las descripciones de los datos donde se almacenaran estos hechos. A estos datos se le llaman metadatos.

Ejercicio ...
Modelamiento E/R Modelo Relacional de Datos

Acceso a Bases de Datos Con Java
JDBC: Java DataBase Conectivity

Qué es JDBC?
JDBC es la API estándar de acceso a bases de datos usando el lenguaje de programación Java. Esta API se incluye con el kit de desarrollo de Java versión 1.1 y posteriores.

Java no Usa ODBC Directamente
Sun Microsystems crea una nueva API debido a que ODBC utiliza funciones de bajo nivel que no son compatibles 100% con Java, como lo son los punteros. Sun se une a Intersolv para desarrollar un puente entre JDBC y ODBC, ya que el acceso a bases de datos con ODBC es un modelo estándar.

Por qué Utilizar JDBC y no CGI?
CGI: es un método lento y además propicia errores en las aplicaciones, ya que requiere el uso de al menos dos lenguajes de programación (Java y C ó C++). C y C++ no son lenguajes 100% portables.

Tipos de Controladores JDBC
Existen cuatro niveles de controladores JDBC.
Nivel 1: Puente JDBC-ODBC. Nivel 2: Parcialmente hecho en Java. Nivel 3: Protocolo de Red. 100% Java. Nivel 4: Protocolo Nativo de la BD. 100% Java.

Nivel 1
Desarrollado por JavaSoft. Usa el driver ODBC específico para la Base de Datos. Requiere que el ODBC se encuentre disponible en la máquina cliente donde se ejecuta la aplicación JAVA.

Driver de Nivel 1
Aplicación JDBC Driver Manager Puente JDBC-ODBC ODBC Driver Manager ODBC (DB2) ODBC (Oracle) Servidor Cliente

DBMS (DB2)

DBMS (Oracle)

Nivel 2
Utiliza JAVA para hacer llamadas al API de acceso (protocolo) del DBMS que debe estar disponible en el cliente. El cliente provee la conectividad y acceso a la base de datos. El driver es una implementación parcialmente hecho en JAVA.

Driver de Nivel 2
Aplicación JDBC Driver Manager Puente Puente JDBC-ProtocoloDBMS JDBC-ProtocoloDBMS JDBC-CAE JDBC-SQL*Net CAE (DB2) SQL*Net (Oracle) Servidor

Cliente

DBMS (DB2)

DBMS (Oracle)

Nivel 3
Utiliza los protocolos de red que vienen con el JDK para conectarse a un servidor. En el servidor se traducen los requerimientos a transacciones del DBMS. No requiere código ejecutable en el lado del cliente (del API de acceso al DBMS). El protocolo de red que se utiliza es genérico, por lo tanto el mismo driver puede acceder a diferentes DBMS.

Driver de Nivel 3
Aplicación JDBC Driver Manager Driver JDBC Protocolo genérico de red Cliente

Middleware

Middleware Servidor

DBMS (DB2)

DBMS (Oracle)

Nivel 4
Driver completamente escrito en JAVA. Comunica directamente a la base de datos con el protocolo de red del DBMS. Esta comunicación directa se implementa a través de conexiones de red (“sockets”).

Driver de Nivel 4
Aplicación JDBC Driver Manager Cliente

Driver JDBC (DB2)

Driver JDBC (Oracle) Servidor

DBMS (DB2)

DBMS (Oracle)

Dónde obtener los Drivers?
Http://java.sun.com/products/jdbc

Qué Necesito para utilizar JDBC?
JDK 1.1 o superior Controlador JDBC El DBMS

Estructura General de una Aplicación JDBC
Statement Cargar el Driver JDBC Conectarse a la BD Crear el Objeto Statement Ejecutar la sentencia SQL Procesar los Resultados

Prepared Statement Callable Statement

La Fuente de Datos
Tener Acceso a un DBMS:
ACCESS ORACLE MYSQL MSQL POSTGRESS INFORMIX

Puente JDBC:ODBC
Crear la fuente de datos con el administrador de ODBC instalado en el cliente.

El paquete java.sql
Conjunto de clases e interfaces escritas en JAVA. El nivel del driver consiste en implementaciones que trabajan con el manejador de la base de datos. El nivel de la aplicación consiste en la clase DriverManager que maneja los drivers siendo utilizados por una plicación o applet para acceder una base de datos.

La API JDBC de Java
Clases/Interfaces del paquete java.sql
Driver DriverManager DriverPropertyInfo Connection DatabaseMetadata Statement PreparedStatement CallableStatement ResultSet ResultSetMetadata

Jerarquía de Clases del Paquete java.sql
Object DriverManager DriverInfo DriverPropertyInfo Types Date Date Time Throwable Exception Timestamp SQLException SQLWarning DataTruncation

Interfaces
Connection DatabaseMetaData Driver ResultSet ResultSetMetaData Statement PreparedStatement CallableStatement

La Clase SQLException
Esta clase provee un mecanismo para el control de errores cuando se accesa una base de datos. Un objeto del tipo SQLException contiene:
Una descripción del error. Una cadena (SQLState) identificando el error. Un código de error.

Manejo de las Excepciones
try { // bloque con sentencias de JDBC } catch(SQLException ex){
System.out.println(“Error SQL: ”+ex.getMessage()); System.out.println(“Estado: ”+ex.getSQLState());

}

Tipos JDBC a Tipos JAVA
CHAR=>String VARCHAR=>String LONGVARCHAR=>String NUMERIC=>java.math.BigDecimal DECIMAL=>java.math.BigDecimal BIT=>boolean TINYINT=>byte

Continuación ...
SMALLINT=>short INTEGER=>int BIGINT=>long REAL=>float FLOAT=>double BINARY=>byte[] VARBINARY=>byte[]

Continuación ...
LONGVARBINARY=>byte[] DATE=>java.sql.Date TIME=>java.sql.Time TIMESTAMP=>java.sql.Timestamp

El Programa en Java Para el Acceso a la BD
Instrucciones SQL Estáticas

Definición de las Referencias
// Aquí se definen las referencias a la BD String NombreDriver ="sun.jdbc.odbc.JdbcOdbcDriver"; String url ="jdbc:odbc:JDBC_PRUEBA"; String usuario = "Administrador"; String passwd = ”872401"; Driver driver; Properties p; Connection conexion; Statement instruccionSQL; String sql; ResultSet resultadoSQL;

Cargando el Driver
// Aquí se carga el puente JDBC:ODBC driver = (Driver)Class.forName(NombreDriver).newInstance();

La Conexión con la BD
// Propiedades requeridas para el usuario en la BD p = new Properties(); p.put("user",usuario); p.put("password",passwd); // Aqui se establece la conexión física con la BD conexion = driver.connect(url,p);

Creando la Sentencia SQL
// Se crea el objeto para manejar las instrucciones SQL instruccionSQL = conexion.createStatement(); // Cargamos el sql sql = new String("select * from empresas");

Ejecutando el SQL
// Se ejecuta la instrucción SQL resultadoSQL = instruccionSQL.executeQuery(sql);

Procesando los Resultados
// Se arma la cadena de resultados while (resultadoSQL.next()){ cadena += resultadoSQL.getString(1)+ resultadoSQL.getString(2)+ resultadoSQL.getString(3)+ "\n"; } areadetexto.setText(cadena);

Se Liberan los Recursos
resultadoSQL.close(); instruccionSQL.close(); conexión.close();

Ejercicios ...
JDBC Instrucciones SQL Estáticas

El Programa en Java Para el Acceso a la BD
Instrucciones SQL Dinámicas

Qué es un SQL Dinámico?
El SQL dinámico es una forma de preparar instrucciones SQL haciendo uso de parámetros dentro del SQL. Esto permite que el usuario sea el que decida que datos extraer de la Base de Datos.

Cómo se crea un SQL Dinámico?
Utilizar la interfaz PreparedStatement Crear el SQL poniendo un símbolo de (?) en el parámetro. select nombre from empleados where apellido = ?

Métodos de la Interfaz PreparedStatement
clearParameters execute executeQuery executeUpdate setAsciiStream setBinaryStream setBoolean setByte setDate setShort setString setTime setFloat setInt setLong setNull setNumeric setDouble

clearParameters
Borra los valores de todos los parámetros que está usando actualmente la instrucción dinámica SQL. Preparado.clearParameters();

execute
Ejecuta una instrucción SQL ya sea de actualización o de consulta. ResultSet resultados = preparado.execute();

executeQuery
Se usa para ejecutar SQL que retornan un conjunto de resultados. ResultSet resultados = preparado.executeQuery();

setInt, setString, ...
Asigna los parámetros que serán enviados a la base de datos en el SQL. setInt(1,100); Este ejemplo pone en el primer parámetro en valor de 100.

Definición de las Referencias
// Aquí se definen las referencias a la BD String NombreDriver ="sun.jdbc.odbc.JdbcOdbcDriver"; String url ="jdbc:odbc:JDBC_PRUEBA"; String usuario = "", passwd=""; Driver driver; Properties p; Connection conexion; String sql, cadena=""; TextArea areadetexto; TextField campo; PreparedStatement selectpreparado; ResultSet resultadoSQL;

Cargando el Driver y la Conexión
// Aquí se carga la clase que implementa el puente JDBC:ODBC driver = (Driver)Class.forName(NombreDriver).newInstance(); // Establece las propiedades para el usuario en la BD p = new Properties(); p.put("user",usuario); p.put("password",passwd); // Aquí se establece la conexión física con la BD conexion = driver.connect(url,p);

Se Crea el SQL Preparado
// Cargamos el sql y ponemos un ? para cambiarlo por el valor digitado sql = new String("select * from personas where edad > ?"); selectpreparado = conexion.prepareCall(sql);

Ejecutando el SQL
// Borra los valores de los parámetros del select selectpreparado.clearParameters(); // Especifica la edad en el select selectpreparado.setInt(1,Integer.parseInt(campo.getText())); // Ejecuta la instrucción y obtiene los resultados resultadoSQL = selectpreparado.executeQuery();

Procesando los Resultados
while (resultadoSQL.next()){ cadena += " [" + resultadoSQL.getString(3) + "] " + " [" + resultadoSQL.getString(2) + "] " + " [" + resultadoSQL.getString(4) + "] " + "\n"; }

Liberando los Recursos
resultadoSQL.close(); instruccionSQL.close(); conexión.close();

Ejercicios ...
JDBC Instrucciones SQL Dinámicas

Sign up to vote on this title
UsefulNot useful