You are on page 1of 135

Presentacin..

3
Modulo
Semana 1: Arreglos Lineales y Matrices ...4
Semana 2: Ordenamiento de datos y Bsqueda de Datos..28
Semana 3: Programacin Orientada a Objetos 40
Semana 4: Manejo de la Clase String 72
Semana 5: Manejo de Archivos .....81
Semana 6: Clases Primitivas .99
Semana 7: Mtodos propios 116
Semana 8: Ejercicios de Aplicacin127
Semana 9: Manejo de Capas en una aplicacin en escritorio133
Bibliografa: 421







PRESENTACIN
Esta gua didctica es un material de ayuda institucional, perteneciente a las
especialidades de computacin, Ingeniera de Software e Ingeniera de Redes y
Comunicaciones tiene por finalidad proporcionar los conocimientos de la programacin
orientada a Objetos a los estudiantes del segundo ciclo de estudios.
La Organizacin SISE, lder en la enseanza tecnolgica a nivel superior, promueve la
elaboracin de materiales educativos, en concordancia a las exigencias de las tecnologas
de estos tiempos, que permiten la creacin de nuevas herramientas de aprendizaje con el
objetivo de facilitar el acceso de los estudiantes a la educacin en el marco del desarrollo
tecnolgico de la informtica de las telecomunicaciones.
Esta gua permite conocer las herramientas indispensables para la elaboracin de
aplicaciones con el uso de la tcnica O.O. Se inicia con el uso de tcnica en manejo de
datos en memoria y en el manejo de capas donde estas tcnicas bsicas se necesitan
para dar solucin a una determinada proposicin o problema.
En este proceso el alumno aprender instrucciones que le permitirn evaluar expresiones
para luego procesar un conjunto de sentencias. Tambin aprender el manejo de una
aplicacin a nivel de contenedores.
La implementacin y uso de Capas dentro de la aplicacin en escritorio permitirn que el
alumno aplique la tcnica Orientada a objetos.
Todas estas herramientas darn un soporte solido al alumno para aprender a programar
en cualquier lenguaje Orientada a Objetos(JAVA, .NET, Visual C,etc).
Este material en su primera edicin, servir para ayudar a nuestros estudiantes
SISESINOS.












Contenidos

- Presentacin del curso: NetBeans. Caracteristicas. Versiones. Mdulos NBM.
- Uso del Entorno Integrado. Proceso de desarrollo de un Proyecto. Conponentes Swing.
- Estructura de un Proyecto.
- Base de Datos. Objetos de una BD. Lenguaje SQL . Sentencias Bsicas
____________________________________________________________________________
NetBeans
NetBeans es un proyecto de cdigo abierto de gran xito con una gran base de usuarios, una
comunidad en constante crecimiento, y con cerca de 100,000 socios en todo el mundo. Sun
MicroSystems adquiri el proyecto de cdigo abierto NetBeans en junio 2000 y contina siendo el
patrocinador principal de los proyectos. Al da de hoy hay disponibles dos productos: el NetBeans
IDE (Entorno de Desarrollo Integrado) y la Plataforma NetBeans. La plataforma NetBeans permite
que las aplicaciones sean desarrolladas a partir de un conjunto de componentes de software
llamados mdulos. Un mdulo es un archivo Java que contiene clases de java escritas para
interactuar con las APIs de NetBeans y un archivo especial (manifest file) que lo identifica como
mdulo. Las aplicaciones construidas a partir de mdulos pueden ser extendidas agregndole
nuevos mdulos. Debido a que los mdulos pueden ser desarrollados independientemente, las
aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fcilmente por otros
desarrolladores de software.

El NetBeans IDE
Es un entorno de desarrollo - una herramienta para programadores pensada para escribir, compilar,
depurar y ejecutar programas. Est escrito en Java - pero puede servir para cualquier otro lenguaje
de programacin. Existe adems un nmero importante de mdulos para extender el IDE NetBeans.
El IDE NetBeans es un producto libre y gratuito sin restricciones de uso.

Qu es netbeans.org?





NetBeans.org es el portal de la comunidad de cdigo abierto de NetBeans dedicado a construir un
IDE de primera clase. netbeans.org permite a usuarios de ms de 160 pases de todo el mundo
estar en contacto con los recursos y los programadores de NetBeans. Es posible descargar desde
aqu las ltimas versiones de NetBeans, acceder a la documentacin de ayuda en lnea, profundizar
su conocimiento personal de Java, estar al corriente de las ltimas noticias, unirse a una lista de
distribucin, contribuir cdigo, conocer las personas implicadas en el proyecto, conocer gente, y
mucho ms.

Instalar NetBeans
La instalacin de NetBeans es muy sencilla. En la mayora de los casos, basta con descomprimir el
archivo ZIP descargado en una unidad de disco con espacio libre suficiente. Para
ejecutar NetBeans necesitar cumplir los requisitos tcnicos detallados a continuacin

Componente Caracteristicas
Una plataforma compatible: NetBeans IDE6.8 Windows 2000/XP/Vista; Linux (x86/x64);Solaris
(x86/x64); Solaris (sparc); Mac OS X; OS
independente.
Espacio de disco suficiente: Dependiendo de la versin que desea instalar; la
que menos utiliza es de 45 MB y la completa de

250MB como requerimiento MINIMO.
Memoria RAM Suficiente: Debera bastar 512 MB (se recomienda 1Gb)
Java JDK 6: jdk-6u4-windows-i586-p.exe

de capacidad de 72 MB.
Cargando la Aplicacin:

1. Dar clic al botn de Inicio de Windows.
2. Seleccionar Todos los programas / Netbeans
3. Seleccionar NetBeans IDE 6.8

Nota: Esperar unos instantes, ya que la aplicacin tarda unos segundos al cargar completamente.
Posteriormente se observar la figura que se muestra a continuacin.





Pantalla principal al Iniciar NetBeans IDE 6.8


Creacin de un Nuevo Proyecto:
1. En el IDE, seleccione File> New Project, tal como se muestra en la siguiente figura.






2. En el asistente de New Project, aplicar la categora de Java y seleccione Java Application,

como se muestra en la siguiente figura. A continuacin, haga clic en Next


3. En el Nombre y ubicacin de la pgina del asistente, haga lo siguiente (tal y como se muestra en
la siguiente figura):
a) Establezca el nombre del proyecto (Project Name): Por ejemplo, Proyecto30.

b) Establezca el directorio donde se almacenar el proyecto (Project Location). Por ausencia
en Windows 2000 y XP, el directorio es el directorio inicial del usuario: C:\Documents and
Settings\usuario. En este ejemplo, el proyecto se ubic en: C:\Documents and
Settings\Administrador\Mis documentos\Netbeans Projects. En la lnea siguiente puede
verse la ubicacin del directorio en el que se almacenarn los archivos del proyecto: Project
Location, que es el directorio con el nombre del proyecto dentro del directorio donde se ubica
el proyecto. En este ejemplo es: C:\Documents and Settings\ Administrador\Mis
documentos\ Netbeans Projects \Proyecto30.

c) Asegrese que las casillas de seleccin: Set as Main Project (Haga que este proyecto sea
el proyecto principal) y Create Main Class (Cree la clase principal, la clase con el mtodo
main()) estn seleccionadas.

d) En el campo de texto al lado de la casilla Create Main Class se establece el nombre de la clase
principal. El valor por ausencia es: nombreProyecto.Main, indicando que la clase principal se
llamar Main y estar en el paquete nombreProyecto. Cambie ese valor a Proyecto30.CEjemplo30.

e) Presione el botn Finish




El proyecto es creado y abierto en el IDE. Debe ver los siguientes componentes:

Ventana de Proyectos, que contiene una vista en rbol de los componentes del
proyecto, incluyendo archivos de origen, las bibliotecas que depende de su cdigo, y as
sucesivamente.
Ventana Editor de Cdigo Fuente (Source) con un archivo llamado Guia1Java01 abierto.

La Ventana del Navegador, que usted puede utilizar para navegar rpidamente entre los
elementos seleccionados dentro de la clase.




Explorador
de Proyectos

Inspector de
Componentes
ss

Ventana de
Salida
(Output)
Ventana del Editor



Ubicacin de los Archivos de un Proyecto( pestaa Files en el Explorador)
La figura 1.7, muestra los directorios y archivos generados al crear el proyecto. El cdigo fuente de
una clase se guarda en un archivo que tiene el mismo nombre de la clase y con la extensin .java,
por ejemplo, Ejemplo30.java est dentro de la carpeta proyecto30 (el nombre del paquete) que a su
vez est dentro de la carpeta src (donde se almacenan los archivos fuentes de este proyecto) y
que a su vez est dentro de la carpeta Proyecto30 (que contiene todos los archivos del proyecto).


Creacin de una Clase
Para crear una clase se sigue el siguiente procedimiento:

1. Del men principal de Netbeans 6.8, figura 1.1, seleccione la opcin Files/New File,
presione las teclas Ctrl+ N o haga clic en el icono New File, como se muestra en la
figura 1.8:














Figura 1.8
2. Aparecer la primera ventana del asistente para crear una nueva clase, figura 1.9. En
esta ventana del asistente seleccionaremos el tipo de clase que deseamos crear.
Seleccionaremos la opcin Java en el recuadro Categories: y la opcin Java Class en el
recuadro File Types:, y luego presionaremos el botn Next>.


Programas de Consola con Netbeans 6.1



3. Aparecer la segunda ventana del asistente para crear clases, mostrada en la figura 1.10.
En esta ventana seleccionaremos el nombre y la ubicacin de la clase.

a) Establezca el nombre de la clase (Class Name): Por ejemplo, CCirculo.
b) Establezca el paquete donde estar la clase (Package). Por ejemplo :proyecto30
c) Presione el botn Finish.















Figura 1.10
4. Desaparecer el asistente para crear una nueva clase y aparecer el esqueleto de la clase
creada, 1.11.
Programas de Consola con Netbeans 6.1





5. Agregue el cdigo de los atributos, constructores y mtodos siguientes a la clase:
CCirculo
.java













Programas de Consola con Netbeans 6.1



-Modificar la Clase Denominada CEjemplo30.java












6. Guarde la clase seleccionando del men principal la opcin File/Save,
presione las teclas Ctrl+S para guardar el Documento actual o haga
clic en el icono Save All ( Ctrl+ Shift+S) para guardar todo el
Proyecto..


Para Ejecutar la Aplicacin, se debe pulsar la tecla F6 o relizar un Click en el Icono








Programas de Consola con Netbeans 6.1






Luego realizar un clicK en la ventana de Salida (Output) que esta en la parte inferior del IDE , e
ingresar el valor del Radio y pulsar ENTER para mostrar los Resultados.
Nota:Para volver a compilar y Generar nuevamente el Proyecto( compilarlo en su Integridad) se
debe pulsar SHIFT+F11 o el Icono




Pestaa Services ( Servicios) del explorador de Proyectos

Se Utiliza para Agregar Nuevos drivers ( Archivos Controladores) de Base de Datos o
Conexiones Con base de datos, as como tambien permite modificarlos y eliminarlos.









Generacin de los Mtodos de Acceso ( getXxx() y SetXxx() )
NetBeans permite la generacin automtica de los mtodos de acceso (getXxx() y
setXxx()) que nos permiten inspeccionar y modificar el valor de los atributos de una
clase. Para generar los mtodos de acceso de la clase que se encuentra en la ventana
de edicin se sigue el siguiente procedimiento:

1. Haga clic con el botn derecho en cualquiera de los atributos de la clase
y seleccione las opciones Refactor/Encapsulate Fields de los mens
emergentes, como se muestra en la figura 1.13.

2. Aparecer el cuadro de dilogo mostrado en la figura 1.14. Seleccione todas las
Programas de Consola con Netbeans 6.1

casillas de los mtodos de acceso que dese generar. Cambie en la caja
Combo: Field Visibility a la opcin protected, deselecciona la caja de
seleccin: Use Accessors Even When field is Accesible, y deje el resto de
las
opciones sin modificar, como se muestra en la figura 1.14, y haga clic en
el botn Next>.



Fig 1.13









Fig 1.14
Programas de Consola con Netbeans 6.1

JMenu
Este componente permite agregar la tpica barra de mens que casi
todo programa posee.

De la misma manera que lo JButton, los mens mostrados en la barra
se cambian de texto con clic derecho y luego en Edit Text.
Para agregar ms mens a la barra, se da clic derecho sobre un rea
vaca la misma barra y al final del cuadro desplegable, clic sobre Add
JMenu.
Y para agregar tems o contenido dentro de cada men, le da clic
derecho sobre el JMen al que se le quiere aadir contenido y en la
parte inferior de la lista, con la opcin Add encontramos los
componentes que se pueden agregar.

Si observa el Inspector de Objetos, se dar cuenta de que bajo la barra
de men van apareciendo los JMenu, JMenuItems y dems
componentes que hemos aadido al men, asi que para modificar el
texto que mostrar cada uno de ellos, es necesario seleccionar el
objeto, y luego en la zona de propiedades, con la opcin Text,
cambiamos dicho texto.



JComboBox
Componente que muestra una lista desplegable.Para aadir los textos
que sern mostrados en la lista, seleccionamos el ComboBox , y luego
en la zona de propiedades buscamos la opcin Model la cual muestra un
cuadro de dilogo que permite ir aadiendo textos con el botn Add, y
luego de aadirlos, cambiarles de posicin con los controles Up y
Down, editar o eliminar su contenido.Este JComboBox permite acceder a
cada uno de los componentes listados por medio de los mtodos
getSelectedIndex() y getSelectedItem(); el primero retorna la posicin del
objeto seleccionado y el segundo retorna un objecto.
Programas de Consola con Netbeans 6.1




JTable - JScrollPane
Este componente permite crear tablas de filas y columnas para desde
sencillos formularios o listados hasta complejas hojas de clculo tipo Excel.

Este componente, aunque se puede, No se debe colocar directamente en el
rea de trabajo, primero debe colocarse un JScrollPane, el cual permite la
utilizacin de barras de desplazamiento horizontal y vertical en caso de que la
cantidad de celdas sobrepase el tamao de la vista.

Primero seleccionamos el JScrollPane y lo ubicamos en la pantalla; este
aparece inicialmente como un pequeo punto, pero con un clic sobre este punto
y arrastrando el Mouse en diagonal hacia arriba y la izquierda, podemos
acomodar el tamao de la vista que permitir este scroll.

Luego seleccionamos el JTable de la Paleta y hacemos clic sobre el JScrollPane
que ya hemos acomodado anteriormente.

Aparece un JTable con una cantidad de filas y columnas predeterminadas, pero
estas se pueden cambiar haciendo uso de la opcin model que se encuentra en
la zona de propiedades de este objeto. Esta opcin abre un cuadro de
dilogo que permite agregar o quitar filas y columnas, escoger el tipo de dato
que debe ir en cada celda (String, int, double, etc) y permitir cuales celdas
sern editables o no.

Programas de Consola con Netbeans 6.1


Programas de Consola con Netbeans 6.1







JSpinner

Componente que facilita el incremento o
decremento de alguna variable, que por defecto
es numrica, aunque tambin se puede usar
para mostrar un rango de variables de texto, o
hasta crear un objetom ms complejo como un
seleccionador de fechas.




En este ejemplo, el primer JSpinner es usado en conjunto con un
SpinnerNumberModel, el cual soporta una secuencia de nmeros
doubls o int. Adems puede especificar los valores mximos y mnimos
permitidos, el valor inicial y la cantidad de cada incremento o decremento.
Para definir esto, accedemos a la opcin model de la zona de propiedades
de este JSpinner, y en el cuadro de dilogo que aparece, seleccionamos
la opcin User Code y colocamos el siguiente cdigo:

new javax.swing.SpinnerNumberModel ( inicial, min, max, incremento )
Y lgicamente, reemplazamos las variables por el valor que
deseamos. El segundo JSpinner es usado con un SpinnerListModel
el cual muestra los valores definidos en un arreglo de objetos o en
una lista.

El tercer JSpinner es usado con SpinnerDateModel y un DateEditor, con
lo cual el JSpinner soporta una secuencia de fechas.

Desde netbeans, estas propiedades y funcionalidades adicionales no se
pueden agregar directamente por medio de la interfaz grfica. Este
tipo de personalizacin que soportan los spinner es solo posible editando
el cdigo y agregando estos modelos.

Este tutorial est encaminado por ahora solo a la creacin de interfaces
grficas desde netbeans, as que el cdigo fuente de personalizacin de este
Programas de Consola con Netbeans 6.1

tipo de objetos se desarrollar en otro tutorial dedicado a la programacin
avanzada de interfaces swing.

Ms info: http://java.sun.com/docs/books/tutorial/uiswing/components/spinner.html

Los componentes hasta ahora nombrados se han especificados un poco en
detalle debido a que una buena utilizacin de estos, permite obtener una
interfaz ms agradable; la extensa lista de los dems componente de java
swing no han sido detallados debido a su fcil utilizacin, ya que el usuario puede ir
probando, colocando objetos y personalizando su interfaz a su medida.

A pesar de que Netbeans es un entorno de desarrollo muy completo y podemos editar
tanto cdigo como GUI queramos, es muy recomendable usar esta herramienta
solo como editor grfico, ya que la edicin de cdigo desde este ide no tiene un buen
nivel de usabilidad que permita un buen control de cdigo, correcin de errores y
dems tareas de manera facil y agradable.





























Uso de J DBC - Clase Driver Manager
JDBC, es mas que un acrnimo de Java DataBase Connectivity, es un API de Java que
permite al programador ejecutar instrucciones en lenguaje estndar de acceso a Bases de
Datos SQL (Structured Query Language), un lenguaje para crear, examinar, manipular y
gestionar Bases de datos relacionales. En el diagrama siguiente se puede apreciar como la
idea es que las aplicaciones slo se tengan que comunicar con el interfaz JDBC. ste
es el encargada de comunicarse con los sistemas de base de datos.










Ilustracin 1, Esquema JDBC

Esto hace que la programacin de aplicaciones de acceso a bases de datos no
necesite conocer el funcionamiento del SGBD en particular, lo que hay que conocer es el
funcionamiento de JDBC. Por supuesto, es necesario adquirir un controlador JDBC
para el sistema gestor de base de datos que utilicemos. La comunicacin fundamental
entre las aplicaciones y JDBC se realiza a travs de instrucciones SQL.




controladores( Drivers)

Una vez instalado, configurado y puesto en funcionamiento nuestro sistema gestor de
base de datos favorito, si queremos que las bases de datos creadas por l sean accesibles
desde los programas Java, necesitamos el controlador JDBC de ese sistema.

Hay cuatro tipos de controladores:

Tipo 1. Controlador que traduce de JDBC a ODBC, Un controlador de este tipo es
la pasarela JDBC-ODBC. No es muy productiva ya que necesita ser
configurada para un controlador ODBC concreto. aunque actualmente
existen mejores soluciones de este tipo, sigue requiriendo tener dos controladores
en el cliente.



















Ilustracin 2, Funcionamiento del controlador
JDBC de tipo 1

Tipo 2. Son controladores parcialmente escritos en Java y parcialmente escritos
en el cdigo nativo que comunica con el API de la base de datos. En estos
controladores hay que instalar tanto paquetes Java como paquetes de cdigo
nativo, lo que no les hace vlidos para Internet.






Ilustracin 3, Funcionamiento del controlador
JDBC de tipo 2






Tipo 3. Son paquetes puros de Java que usan protocolos independientes de la
base de datos. Es decir las instrucciones JDBC son pasadas a un servidor
genrico de base de datos que utiliza un protocolo determinado. No
requiere tener instalado ningn software de librera de la base de datos. Lo
malo es que el servidor intermedio (middleware) suele requerir instrucciones
especficas de la base de datos.












Ilustracin 4, Funcionamiento del controlador
JDBC de tipo 3





Tipo 4. Paquetes de Java puro que traducen peticiones JDBC a protocolo de base
de datos especfico. No requieren intermediarios entre el software JDBC y la base
de datos






Ilustracin 5, Funcionamiento del controlador
JDBC de tipo 4

Normalmente las distribuciones JDBC que suministran los fabricantes son de tipo 3 o 4. para
adquirir estos controladores es necesario ponerse en contacto con el fabricante o dirigirse a su
pgina web y despus descargarlo. Las instrucciones de instalacin las da el fabricante, pero en
caso de ser controladores de tipo 3 o 4 habr que instalar los paquetes del API JDBC en
la ruta Classpath para que sean accesibles por los compiladores Java.
Para saber si existe controlador JDBC para nuestra base de datos de trabajo, se puede
comprobar en la direccin:
http://servlet.java.sun.com/products/jdbc/drivers/index.html

conexin

Para conseguir conectar una base de datos con una aplicacin, nuestra aplicacin requiere el
URL de la base de datos y las propiedades que establezca nuestro controlador JDBC.
Las clases necesarias para usar JDBC estn en el paquete java.sql. El primer paso es instalar el
controlador (driver) de la base de datos.





Tipo Clase JDBC
Implementacin
java.sql.Driver
java.sql.DriverManager
java.sql.DriverPropertyInfo
Conexin a base de datos java.sql.Connection
Sentencias SQL
java.sql.Statement
java.sql.PreparedStatement
java.sql.CallableStatement
Datos java.sql.ResulSet
Errores java.sql.SQLException
java.sql.SQLWarning

Pero el mtodo que ms se usa es lanzar el controlador en la propia aplicacin mediante
el mtodo esttico forName de la clase Class. Es decir, el formato es:

Class.forName(rutaDelDriver);

La ruta del driver tiene que venir en las instrucciones del fabricante. Por ejemplo en el
caso del controlador MySQL el formato es:

Class.forName("com.mysql.jdbc.Driver");

En SQL Server 2005 es

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

Esa instruccin puede dar lugar a las excepciones ClassNotFoundException (si no se
encontr la clase en el driver JDBC). Una vez que el controlador se ha registrado,
entonces se abre la URL a la base de datos. cuyo formato suele ser:

jdbc:sgbd://servidor/basedatos:puerto?user=xxx&password=yyy

Por ejemplo en MySQL

jdbc:mysql://localhost/NombreBD:3306?user=usuario&password=clave


Por ejemplo en SQL Server 2005

jdbc:sglserver://localhost:1433;databasename=NombreBD

La conexin se realiza mediante un objeto de la clase java.sql.Connection. La
construccin tpica implica indicar la URL de la base de datos, el usuario y la
contrasea. Ejemplo (MySQL):

Connection cn=DriverManager.getConnection( "jdbc:mysql://localhost/almacen:3306","root","compa");


El mtodo esttico getConnection de la clase DriverManager es el encargado de
realizar la conexin. Al crearla pueden ocurrir excepciones SQLException que habr
que capturar. Los fallos ocurren por que la URL est mal, la base de datos no est
ejecutndose, el usuario no es el correcto, etc. La conexin se cierra con el mtodo close
de la clase Connection .
DSN ( Data Source Name)
un DSN son las siglas de Data Source Name y son bsicamente unos nombres o referencias a
bases de datos que utilizan los sistemas Windows para trabajar con esas bases de datos por
conexin ODBC. En los DSN se especifican los datos que necesita Windows para conectarse con
una base de datos, como el nombre del servidor o el origen de datos, cadena de conexin, etc. Los
DSN se configuran desde el panel de control de Windows, en Herramientas administrativas -
Origenes de datos ODBC.

Una base de datos es sencillamente un conjunto de tablas en las que almacenamos distintos
registros (artculos de una tienda virtual, proveedores o clientes de una empresa, pelculas en
cartelera en el cine...). Estos registros son catalogados en funcin de distintos parmetros que los
caracterizan y que presentan una utilidad a la hora de clasificarlos. As, por ejemplo, los artculos de
una tienda virtual podran catalogarse a partir de distintos campos como puede ser un nmero de
referencia, nombre del artculo, descripcin, precio, proveedor...

Las bases de datos son construidas sirvindose de aplicaciones tales como el Microsoft Access o el
MySQL las cuales resultan bastante sencillas de utilizar con unos conceptos mnimos.

Nuestro objeto aqu no es explicar la forma de explotarlas sino cmo establecer una conexin entre
la base de datos, almacenada en cualquier lugar del disco duro y nuestra pgina web alojada
tambin en cualquier parte y reconocida por nuestro servidor personal a partir del directorio virtual.

Para crear este vnculo, nos servimos de los conectores ODBC (Open DataBase Connectivity) los
cuales establecen el enlace con la base de datos.












El primer paso para crear esta conexin es ir al panel de configuracin y abrir el icono ODBC 32bits.
Dentro de l, deberemos crear un DSN (Data Source Name) de tipo sistema o usuario. Para ello nos
colocamos en la solapa correspondiente (DSN sistema o DSN usuario) y seleccionamos "Aadir". A
continuacin se nos pedir seleccionar los controladores de la aplicacin que hemos utilizado para
crear la base de datos, el nombre que le queremos asignar (aquel que empleemos en nuestros
scripts) y el camino para encontrarla en el disco duro.
Esta DSN permite en realidad definir la base de datos que
ser interrogada sin necesidad de pasar por la aplicacin
que hayamos utilizado para construirla, es decir, con
simples llamadas y rdenes desde nuestros programa
podremos obtener los datos que buscamos sin necesidad
de ejecutar el Access o el MySQL los cuales,
evidentemente, no tendrn por qu encontrarse en el
servidor donde trabajemos.



















Interfaz Statement
la interfaz Statement permite ejecutar las instrucciones SQL y devolver el resultado generado: El
mtodo createStatement de la clase Connection, permite obtener una variable de la interfaz
Statement que permite ejecutar sentencias SQL sobre la base de datos. Los objetos Statement
se crean de esta forma:

Statement select = con.createStatement();

La interfaz ResultSet representa un conjunto de datos resultado de una consulta SQL, para
acceder a los registros se emplea un cursor que inicialmente apunta antes del primer registro y
para avanzar por los registros se emplea el metodo ResultSet.next(). ResultSet es de slo
lectura:

ResultSet nombres = select.executeQuery ("SELECT * FROM Tabla ");

Las consultas Statement tienen mtodos diferentes segn el tipo de instruccin SQL empleada:
executeQuery(String sql): devuelve un objeto ResultSet , que contiene un conjunto de
registros ; se utiliza cuando se usa SELECT. executeUpdate ( String sql): ejecuta una
instruccion de tipo INSERT, UPDATE o DELETE

Dado que la utilizacin de un Driver de BD, iniciar una conexin y ejecutar las sentencias de
SQL para acceder a las tablas de una BD se realizan cuando la aplicacin esta en ejecucin ;
esto puede generar 2 tipos de Excepciones :ClassNotFoundException y SQLException (
Errores en tiempo de Ejecucin) por lo cual Java obliga a utilizar la Instruccin que maneja las
Excepciones En Java:




try {
//Operaciones que pueden dar a lugar a una Excepcin o error en tiempo de ejecucin
cuando se realiza E/S

}
catch( Manejador Nombre)
{
// Acciones a ejecutar cuando se produzca la Excepcin, para manejarla de la mejor
manera posible. Puede haber mas de una clausula catch si son mas de una las
excepciones
}
EJEMPLO COMPLETO (conexin con Microsoft Access con DSN)
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn;
cn=DriverManager.getConnection("jdbc:odbc:dsnaccess","","");
Statement st=cn.createStatement();
ResultSet rs= st.executeQuery("Select * from facturas");
//Operaciones para mostrar los resultados de la consulta
cn.close();
} catch (ClassNotFoundException c) {
// TODO
System.out.println("ERROR CLASE NO HALLADA:"+c.toString());
} catch (SQLException f) {
// TODO
System.out.println("ERROR EN SQL:"+f.toString());


}
executeUpdate

Este es un mtodo Statement que permite ejecutar instrucciones SQL de tipo
UPDATE, INSERT o DELETE y tambin CREATE TABLE , DROP TABLE y otros de
definicin de tablas. Devuelve un entero que indica el nmero de filas implicadas.

Ejemplo:

try{
Statement st=con.createStatement();
st.executeUpdate("UPDATE clientes SET + sexo='V' WHERE
sexo='H'");
}
catch (SQLException e){
System.out.println(e.getMessage());
}

excuteQuery

Este mtodo permite ejecutar una consulta SELECT. Este tipo de consultas devuelven
una tabla, que en Java se representa con objetos de clase ResultSet. El mtodo next
de esta clase permite avanzar de fila, mientras que hay varios mtodos get que permiten
obtener el valor de una columna. En el caso tpico, el recorrido por una consulta se hace:


try{
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(SELECT * FROM empleados);
while(rs.next()){
System.out.println(rs.getString(Nombre)+
rs.getInt(Edad));
}
}
catch (SQLException e){
System.out.println(ERROR:+ e.getMessage());
}








El mtodo next permite ir al registro siguiente, devuelve false en el caso de que no
existe un siguiente registro. Al avanzar por los registros, se pueden utilizar mtodo get
para obtener valores. Los mtodos get tienen como nombre get seguido del tipo de datos a
recoger (getString, getByte, getBigDecimal,...). Se les pasa entre comillas el
nombre del campo a recoger (nombre segn est puesto en la base de datos) o el nmero
de campo segn el orden en el que aparezca en la tabla de la base de datos (el primer
campo es el 1). Para ello hay que conocer la equivalencia entre los tipos SQL y los tipos
Java:

tipo SQL tipo Java equivalente
TINYINT byte
SMALLINT short
INTEGER o INT int
BIGINT long
NUMERIC(m,n) o DECIMAL(m,n) java.math.BigDecimal
FLOAT(n) float
REAL double
CHAR(n) String
VARCHAR(n) String
BOOLEAN o BOOL o BIT boolean
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
BINARY byte[]
BLOB java.sql.Blob
CLOB java.sql.Clob
ARRAY java.sql.Array

wasNull

Al leer un determinado campo con alguna funcin get puede ocurrir que el valor ledo sea nulo. En ese
caso se puede comprobar mediante la funcin booleana wasNull. Esa funcin devuelve true si la ltima
funcin get obtuvo un valor nulo de la base de datos. Ejemplo:

int n=rs.getInt("Valor");
if (rs.wasNull()){
System.out.println("Se ley un valor nulo");
}





Excepciones en la base de datos
SQLException

En el paquete java.sql se encuentra la clase SQLException que captura las
excepciones ocurridas en el manejo de la base de datos. Su uso no difiere del resto
de excepciones, pero incorpora nuevos mtodos interesantes:

getSQLState. Describe el error segn las convenciones XOPEN.

getMessage. El mtodo tpico de excepciones, salvo que ste recoge el texto que
enva el controlador JDBC segn lo informado por el gestor de bases de datos,
lo que le hace muy efectivo.
getErrorCode. Devuelve el cdigo de error ocurrido (segn lo informado por el
gestor de la base de datos)

getNextException. Que permite ver la siguiente excepcin ocurrida, ya que a
veces ocurren varias a la vez (especialmente en transacciones y operaciones
complejas).

Ejemplo:

try{
//instrucciones de manejo de la base de datos
}
catch(SQLException e){
while(e!=null){
System.err.println("Estado: "+e.getSQLState());
System.err.println("Cdigo: "+e.getErrorCode());
System.err.println("Mensaje: "+e.getMessage());
e.getNextException();
}
}



resultados con posibilidades de desplazamiento y
actualizacin. JDBC 2.0

Se ha visto anteriormente como el objeto de clase ResultSet es el encargado
de almacenar los resultados de una consulta SELECT creada con el
mtodo executeQuery de la clase Statement. Este objeto se puede recorrer del
primer registro al ltimo mediante el mtodo next y se puede obtener el valor de cada


campo mediante mtodos get (getInt, getString, getByte, getBigDecimal,...).
En JDBC 2.0 se puede adems realizar recorridos en todas las direcciones sobre los
registros e incluso aadir registros. Para ello el controlador debe ser compatible con
JDBC 2.0, de otro modo no se podrn utilizar estas funciones.


el mtodo createStatement de la clase Connection

Anteriormente vimos como una consulta se crea mediante un objeto Statement el
cual, a su vez, es creado utilizando el mtodo createStatement. Sin embargo este
mtodo puede utilizar dos argumentos que permiten indicar el tipo de ResultSet que
obtendra el Statement. Esos dos argumentos son el tipo y la concurrencia y
permiten utilizar estas constantes.
Para el tipo:

ResultSet.TYPE_FORWARD_ONLY. El conjunto de resultados no tendr
desplazamiento. Slo se podr utilizar el mtodo next (este es el nico valor para
JDBC 1.0 y es el valor predeterminado si se construye el
Statement sin argumentos).

ResultSet.TYPE_SCROLL_INSENSITIVE. El conjunto de resultados tendr
desplazamiento completo pero no tendr en cuenta los cambios.

ResultSet.TYPE_SCROLL_SENSITIVE
.


Conjunto De Resultados con Desplazamiento y Sensibilidad a los
cambios



.

Para la concurrencia:

ResultSet.CONCUR_READ_ONLY.
La base de datos no puede ser modificada mediante el uso del conjunto de resultados

ResultSet.CONCUR_UPDATABLE.
La base de datos es actualizable.desplazamiento por los conjuntos de resultados






Si se permite el desplazamiento, la clase ResultSet posee los siguientes mtodos para
desplazarse por los registros:

mtodo uso
boolean next() Avanza el puntero de registros del conjunto
de resultados al siguiente registro. Devuelve
true si existe registro siguiente.
boolean previous() Coloca el puntero de registros en el registro
anterior si lo hay, si no lo hay devuelve
false
boolean absolute(int registro) Coloca el puntero de registros en la fila
indicada. Si esa fila no existe, devuelve
false. Si el nmero de fila se indica con un
nmero negativo, la fila se cuenta desde el
final.


mtodo uso
boolean relative(int fila) Coloca el puntero de registros en la fila
indicada a partir de la posicin actual del
puntero. Si esa fila no existe, devuelve
false.
El nmero de fila se puede indicar de forma
negativa y en ese caso el puntero se mueve
hacia el primer registro (si es positivo se
mueve hacia el final).
boolean first() Coloca el puntero en el primer registro. Si
no hay primer registro, devuelve false
boolean last() Coloca el puntero en el ltimo registro. Si no
hay ltimo registro, devuelve false
void beforeFirst() Coloca el puntero delante del primer
registro. El mtodo next se movera al
primer registro si se utiliza tras esta orden.
void afterLast() Coloca el puntero detrs del ltimo registro.
El mtodo previous se movera al ltimo
registro si se utiliza tras esta orden.





boolean isFirst() Devuelve true si el puntero est situado
en el primer registro.
boolean isLast() Devuelve true si el puntero est situado
en el ltimo registro.
boolean isBeforeFirst() Devuelve true si el puntero est
situado delante del primer registro.
boolean isAfterLast() Devuelve true si el puntero est
situado detrs del ltimo registro.
int getRow() Obtiene el nmero de registro
actual

Modificacin de datos

Los conjuntos de resultados se pueden utilizar tambin para modificar los
datos obtenidos por la consulta SELECT (siempre y cuando sea posible). Para ello se
necesitan utilizar los mtodos update de la clase ResultSet que permiten modificar el
contenido de un campo en la posicin actual del puntero de registros.
Se trata de un conjunto de mtodos que comienzan con la palabra update
seguida del tipo de datos Java del campo y un segundo parmetro que indica el nuevo
valor para el campo. Ejemplo:

rs.first(); //Si rs es un ResultSet, se coloca el puntero en
//el primer registro
rs.updateDouble(Precio,2.34); //El precio valdr 2,34 en
//el primer registro
rs.updateString("tipo","tr");//El campo tipo valdr tr
rs.updateRow();

El mtodo updateRow es el que permite actualizar la base de datos con los nuevos
cambios. Se debe utilizar cuando estamos seguros de que los cambios son los correctos.
Si queremos anular los cambios se debe utilizar el mtodo cancelRowUpdates

Adicin de datos
Para aadir un nuevo registro (una nueva fila) en el conjunto de resultados obtenido. Hay
que emplear los mtodos anteriores de modificacin de datos (mtodos update) sobre
una fila especial conocida como fila de insercin de registros.
Para ello los pasos son:






1> Colocar el cursor en la fila de insercin de registros mediante el mtodo
moveToInsertRow.
2> Actualizar los datos de los campos de ese nuevo registros usando los mtodos
update (updateString, updateInt, updateBigDecimal,...).

3> Aadir el registro en la base de datos con insertRow (se puede cancelar
con
cancelRowUpdates)

4> Colocar el cursor en la posicin anterior utilizando el mtodo
moveToCurrentRow.

Borrar registros
Se puede borrar el registro actual del conjunto de resultados utilizando el mtodo deleteRow.


Actualizar registro

El mtodo refreshRow del ResultSet actualiza el valor del registro actual, segn lo que
valga ahora en la base de datos. Se usa por si acaso se ha modificado el valor de los datos
desde otro cliente de la base de datos.

INTRODUCCIN A LAS APLICACIONES DESKTOP CON NETBEANS

Objetivos:
Que el Alumno:
1) Haga una aplicacin de Mantenimiento Bsica utilizando el asistente de NetBeans 6.1.
2) Utilice controles definiendo propiedades, mtodos y otras configuraciones especiales.
3) Ejecute un programa que se conecta a MySQL, que fue creado de forma manual.

1) Configurar el Entorno de NetBeans 6.1 (Agregar el controlador de Mysql en la ruta)












Verifique que el archivo mysql-connector-java-5.1.5-bin.jar este en la ruta que se muestra a
continuacin:

C:\Archivos de programa\Apache Software Foundation\Apache Tomcat 6.0.16\lib

Si no existe el Archivo, solictelo a su instructor y cpielo en la ruta descrita anteriormente



2) Levante los Servicios de WampServer








3) Seleccione el Driver para Mysql






4) Cree la Conexin a su base de Datos (Clic Derecho, Connect Using)






Defina la URL de la Base de Datos y el nombre de su Usuario

Recordatorio: Carnet es su NMERO DE CARNET, no la palabra carnet



Con lo anterior aparecer la siguiente Pantalla, la cual indicara si la conexin a la Base de Datos se ha realizado y
entonces presione el Botn OK.










5) Haga la conexin a su Base de Datos (clic derecho del ratn) que contiene como nombre su nmero de carnet.



Presione el botn OK y aparecer lo siguiente:



6) Haga una Java Aplicacin Desktop, Seleccionando la Categora Java y
seleccionando el tipo de proyecto como se muestra en la figura








7) Como nombre del Proyecto escriba Alumnos, seleccione como ubicacin del proyecto la carpeta que contiene
su nmero de carnet, seleccione la Database Application y despus presione el botn Next >.



Aparecer la siguiente pantalla, que muestra la conexin a la Base de Datos y las tablas que la forman.








8) Ahora procedemos a Seleccionar la Database Connection y la Database Table, como se muestra a continuacin,
seleccionando la tabla alumno que fue creada en la gua anterior.


9) Seleccione el radio botn Textfields y presione el botn Finish










10) Reconozca el entorno de Desarrollo para Aplicaciones Desktop.



11) Configuracin de Botones, se les har el siguiente cambio a los botones; ubquese en cada botn y cmbieles el
nombre oprimiendo el botn derecho del ratn seleccione el men emergente properties, ubquese en la
propiedad text y cambie el nombre a cada botn tal como se muestra en la siguiente figura.

12) Una vez que se ha realizado el cambio de nombre para los botones, seleccione el
objeto TextField para el Label Sexo y elimine ese objeto.



13) Utilizando la vista Design y la paleta (Palette) de controles de NetBeans, se
proceder a realizar el siguiente cambio a su formulario, tome el objeto Combo Box y
colquelo donde estaba ubicado el objeto TextField para el objeto Label Sexo.




La siguiente figura muestra como deber estar su formulario en estos momentos



Ahora procedemos a personalizar el nuevo objeto colocado en el formulario en el paso anterior

14) Ubquese en el objeto Combo Box y presione el botn derecho del Mouse, seleccione la opcin
properties del men emergente y realice los siguientes cambios:

En la propiedad name colquele como nombre sexoField

En la propiedad model escriba M, F

En la propiedad enabled desactivar esta opcin













15) Ubquese en la pestaa Binding y realice los cambios para las propiedades selectedItem y enabled, tal como se
muestra en la figura








16) Proceda a configurar el objeto Combo Box sexoField en la pestaa Code, modifique la propiedad
Variable Name.



17) Ahora proceda a ejecutar el proyecto tal como se describe a continuacin; ubquese en el proyecto
Alumnos como se muestra en la siguiente figura







Seleccione este icono para compilar el proyecto


Seleccione este icono para ejecutar el proyecto




18) Al ejecutar la Aplicacin Desktop aparecer algo similar a la siguiente figura, efectu algunas pruebas, como
ingresar nuevos datos, modificando datos existentes y borrar registros.




DATOSPERSONALES
Nombre
Apellidos
Fechanac
Telefono
Salario



Ejercicio 2 Creacin de Mantenimiento en forma manual (cdigo puro, sin
asistentes).

Este Mantenimiento hace la creacin de una tabla adicional a su esquema de Base de Datos, Esta Tabla es
DatosPersonales.



Char(20)
Char(25)
Date
Char(10)
Float



1) Cree un nuevo proyecto Java Application (No Web), nmbrelo pruebajdbcmanual, ubquelo en la carpeta que
tiene como nombre su nmero de carnet; en el Create Main Class (Clase Principal) digite PruebaManual, tal
como se muestra en la figura





Presione el botn Finish.






2) Agregue el JAR de MySQL al proyecto; ubquese en el objeto Libraries presione el botn derecho del Mouse y
seleccione el tem del men emergente Add JAR/Folder como se muestra a continuacin
















Busque la carpeta

C:\Archivos de programa\Apache Software Foundation\Apache Tomcat 6.0.16\lib

Seleccione el driver de conexin para MySQL

mysql-connector-java-5.1.5-bin.jar



Como se muestra en la siguiente figura


Prof Arturo Florian Herencia SISE 28-01-2009




Despus de agregar el driver para MySQL, el proyecto quedar como muestra la siguiente figura



3) Este cdigo de preferencia, cpielo y pguelo integro a su clase principal de la aplicacin

package pruebajdbcmanual ;
import java.util.*; import java.text.*; import java.awt.*; import java.sql.*;
import java.awt.event.*; Ajuste la cadena de conexin a su BD


class PruebaManual extends Frame implements ActionListener { Button crear, ver, insertar, cerrar;
TextField informacion;
Panel principal; Connection conexion;
String StringConect="jdbc:mysql://localhost:3306/carnet?user=root";
PruebaManual( ) { super("Datos Personales"); setSize(220,120);
principal=new Panel(); crear=new Button("Crear");
crear.addActionListener(this); ver=new Button("Mostrar");
ver.addActionListener(this);
insertar=new Button("Insertar");
insertar.addActionListener(this); cerrar=new Button("Cerrar");
cerrar.addActionListener(this); informacion=new TextField(20);
principal.add(informacion); principal.add(crear); principal.add(insertar);
principal.add(ver); principal.add(cerrar); addWindowListener(new
Cerrar());
principal.setBackground(SystemColor.control);
add(principal); setVisible(true);
try {
Prof Arturo Florian Herencia SISE 28-01-2009



Class.forName("com.mysql.jdbc.Driver").newInstance();
} // try catch(Exception e) {
informacion.setText("No se pudo cargar el Driver JDBC");
} // catch
}// Constructor datospersonales

private void Crear_tabla() {
Statement sentencia ;
try { conexion=DriverManager.getConnection(StringConect);
sentencia=conexion.createStatement();
try {
sentencia.executeUpdate("DROP TABLE IF EXISTS DATOSPERSONALES");
} // try interno
catch(SQLException e) {
informacion.setText("Error al Borrar la tabla");
System.out.println(e);
} // catch interno
sentencia.executeUpdate("CREATE TABLE DATOSPERSONALES ("+
"NOMBRE CHAR(20),"+
"APELLIDOS VARCHAR(25),"+
"FECHA_NAC DATE Not Null,"+ //Not Null significa que los datos son obligatorios
"TELEFONO CHAR(10),"+
"SALARIO FLOAT )") ;
// Crea la Llave Primaria de la Tabla
sentencia.executeUpdate("ALTER TABLE DATOSPERSONALES " + "ADD
CONSTRAINT PK_DATOSPERSON " +
"PRIMARY KEY USING BTREE (Nombre, Apellidos)" ) ;
informacion.setText("Tabla Creada");
conexion.close() ;
} // try externo
catch(SQLException e) { }
} // Crear_tabla

public void actionPerformed(ActionEvent e) { String
com=e.getActionCommand() ;
if ("Crear".equals(com)) {
informacion.setText("") ;
Crear_tabla() ;
} // if Crear else
if ("Insertar".equals(com)) {
new Insertar(this) ;
} // if Insertar else
if ("Mostrar".equals(com)) {
new Ver(this);
} // if Ver else
{
Prof Arturo Florian Herencia SISE 28-01-2009


dispose();
System.exit(0);
}
} // actionPerformed

class Cerrar extends WindowAdapter {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
} // windowClosing
} // Cerrar

public static void main(String args[]) {
new PruebaManual();
} // main
} // datospersonales

class Insertar extends Dialog implements ActionListener {
private Connection conexion;
private Button incluir,terminar;
private TextField nombre,apellidos,fech_nac,telefono, salario ;
Insertar(Frame f)

{
super(f,"Insertar Datos",true);
setSize(320,210); nombre=new
TextField(20); apellidos=new
TextField(25); fech_nac=new
TextField(10); telefono=new
TextField(10); salario=new
TextField(12); incluir=new
Button("Incluir");
incluir.addActionListener(this);
terminar=new Button("Terminar");
terminar.addActionListener(this); Panel
P_Datos=new Panel();
P_Datos.add(new Label("Nombre : "));
P_Datos.add(nombre);
P_Datos.add(new Label("Apellidos: "));
P_Datos.add(apellidos);
P_Datos.add(new Label("Fecha Nacimiento: ")); // Formato yyyy-mm-dd
P_Datos.add(fech_nac);
P_Datos.add(new Label("Telefono : "));
P_Datos.add(telefono);
P_Datos.add(new Label(" "));
P_Datos.add(new Label("Salario : "));
P_Datos.add(salario);
P_Datos.add(new Label(" "));
P_Datos.add(incluir);
P_Datos.add(terminar);
nombre.setEditable(true);
apellidos.setEditable(true);
fech_nac.setEditable(true);
telefono.setEditable(true);
Prof Arturo Florian Herencia SISE 28-01-2009


salario.setEditable(true);
add(P_Datos); setVisible(true);
}

private void insertar_fila() {
Statement sentencia;
String StringConect="jdbc:mysql://localhost:3306/carnet?user=root";
try{
conexion=DriverManager.getConnection(StringConect);
sentencia=conexion.createStatement();
String sql_add="INSERT INTO DATOSPERSONALES VALUES (' " +
nombre.getText().toUpperCase() + "', '" +
apellidos.getText().toUpperCase() + "', '"+
fech_nac.getText()+ "', '" + telefono.getText() + "', "
+ salario.getText()+ ") " ;
sentencia.executeUpdate(sql_add);
} // try
catch(SQLException e) { }
} // insertar_fila

public void actionPerformed(ActionEvent e) {
String com=e.getActionCommand();
if ("Incluir".equals(com)) {
insertar_fila();
nombre.setText("");
apellidos.setText("");
fech_nac.setText("");
telefono.setText("");
salario.setText("");
} else {
if(conexion!=null) {
try {
conexion.close();
} catch(SQLException ex) { }
} // if dispose();
} // else
} // actionPerformed
} // Insertar

class Ver extends Dialog implements ActionListener {
private Connection conexion;
private ResultSet resultado;
private Button siguiente,terminar, anterior, primero, ultimo;
private TextField nombre, apellidos, fech_nac, telefono, salario ;

Ver(Frame f) { super(f,"Mostrar
Datos",true); setSize(330,210);
nombre=new TextField(20);
apellidos=new TextField(25);
fech_nac=new TextField(10);
telefono=new TextField(10);
salario=new TextField(12);
Prof Arturo Florian Herencia SISE 28-01-2009


anterior=new Button("Anterior");
anterior.addActionListener(this);
siguiente=new Button("Siguiente");
siguiente.addActionListener(this);
primero=new Button("Primero");
primero.addActionListener(this);
ultimo=new Button("Ultimo");
ultimo.addActionListener(this);
terminar=new Button("Finalizar");
terminar.addActionListener(this); Panel
P_Datos=new Panel();



P_Datos.add(new Label("Nombre :"));
P_Datos.add(nombre);
P_Datos.add(new Label("Apellidos: "));
P_Datos.add(apellidos);
P_Datos.add(new Label("Fecha Nacimiento:));
P_Datos.add(fech_nac);
P_Datos.add(new Label(" "));
P_Datos.add(new Label("Telefono : "));
P_Datos.add(telefono);
P_Datos.add(new Label(" "));
P_Datos.add(new Label("Salario : "));
P_Datos.add(salario);
P_Datos.add(new Label(" "));
P_Datos.add(anterior);
P_Datos.add(siguiente);
P_Datos.add(primero); P_Datos.add(ultimo);
P_Datos.add(terminar);
add(P_Datos);
nombre.setEditable(false);
apellidos.setEditable(false);
fech_nac.setEditable(false);
telefono.setEditable(false);
salario.setEditable(false);
mostrar();
setVisible(true);
} // Constructor Ver

public void actionPerformed(ActionEvent e) { String
com=e.getActionCommand();
if ("Siguiente".equals(com))
siguiente();
else
if ("Anterior".equals(com))
anterior();
else
if ("Primero".equals(com))
Primero();
else
if ("Ultimo".equals(com))
Prof Arturo Florian Herencia SISE 28-01-2009


Ultimo();
else {
if (conexion!=null) {
try {
conexion.close();
} // try
catch(SQLException ex) { }
} // if conexion
dispose();
} // else
} // actionPerformed

private void mostrar() {
Statement sentencia;
String StringConect="jdbc:mysql://localhost:3306/carnet?user=root";
try {

conexion=DriverManager.getConnection(StringConect);
sentencia=conexion.createStatement();
String sql_str = "SELECT * FROM DATOSPERSONALES ";

resultado=sentencia.executeQuery(sql_str);
siguiente();
} // try
catch(SQLException e) { }
} // mostrar

private void ver_Datos() {
Locale locales = new Locale("en","US") ;
NumberFormat currencyFormatter =
NumberFormat.getCurrencyInstance(locales);
try {
String str_nomb = resultado.getString("NOMBRE") ;
nombre.setText(str_nomb.toUpperCase());
String str_apell = resultado.getString("APELLIDOS") ;
apellidos.setText(str_apell.toUpperCase());
String sfecha = resultado.getString("FECHA_NAC") ;
fech_nac.setText(sfecha.substring(8,10) + "/" +
sfecha.substring(5,7) + "/" + sfecha.substring(0,4)) ;
telefono.setText(resultado.getString("TELEFONO")); String
svalor = resultado.getString("SALARIO") ;
float nvalor = Float.parseFloat(svalor);
String moneda = currencyFormatter.format(nvalor);
salario.setText(moneda);
} catch (SQLException e) { }
} // ver_Datos

private void siguiente() {
try {
if (resultado.next())
ver_Datos();
resultado.refreshRow() ;
Prof Arturo Florian Herencia SISE 28-01-2009


} catch(SQLException e) { } catch(Exception ex) { }
} // siguiente

private void anterior() {
try {
if (resultado.previous())
ver_Datos();
resultado.refreshRow() ;
} // try
catch(SQLException e) { } catch(Exception ex) { }
} // anterior

private void Primero() {
try {
if (resultado.first())
ver_Datos();
} catch(SQLException e) { } catch(Exception ex) { }
} // Primero

private void Ultimo() {
try {
if
(resultado.last())
ver_Datos(
);
} catch(SQLException e) { } catch(Exception ex) { }
} // Ultimo
} // class Ver

4) Compile su programa y Ejectelo




5) Presione Clic en el botn Crear, por lo que aparecer el mensaje Tabla Creada
Presione Clic en el botn Insertar para Agregar Registros a la Tabla
Prof Arturo Florian Herencia SISE 28-01-2009




Para Guardar el Registro presione el botn Incluir, recuerde que el campo fecha de nacimiento el formato de
MySQL es YYYY-MM-DD
6) Agregue por lo menos cinco Registros adicionales.

Al Finalizar de digitar los datos (registros) presione el botn Terminar

7) Presione Clic en el botn Mostrar para Navegar por los registros que contiene la tabla



8) Si desea verificar si los registros fueron introducidos a la base de datos, ubquese en la pestaa Services,
localice la conexin a su Base de Datos, verifique si fue creada la tabla y si contiene los registros que Ud digito,
como muestra la figura siguiente.


Prof Arturo Florian Herencia SISE 28-01-2009
























Prof Arturo Florian Herencia SISE 28-01-2009



























J asperReport ,IReport (Informes de BD en J ava)
Prof Arturo Florian Herencia SISE 28-01-2009


JasperReports es una herramienta de creacin de informes en Java que tiene la habilidad de entregar contenido
enriquecido al monitor, a la impresora o a ficheros PDF, HTML, XLS, CSV y XML.Est escrito completamente en Java y
puede ser usado en gran variedad de aplicaciones de Java, incluyendo J2EE o aplicaciones web, para generar contenido
dinmico. Su propsito principal es ayudar a crear documentos de tipo pginas, preparados para imprimir en una forma
simple y flexible. JasperReports se usa comnmente con iReport, un front-end grfico de cdigo abierto para la edicin
de informes.
2. Herramientas para el Desarrollo
Netbeans 6.x (Puede utilizar esta versin e inclusive la versin mas actual (Al momento de crear este manual es la 6.8)).
Adobe Reader: Este ser utilizado para ver nuestros reportes que estarn en formato PDF. Aunque en esta ocasin no
es indispensable ya que los visualizaremos a travs del Jasper Viewer.
MySQL 5.0: Sera el encargado de alojar a nuestra base de Datos.
Ireport y JasperReports 2.0.4 (o Superior en este momento 3.0.X): El primero ser el entorno grafico que nos ayudara a
crear el Reporte, mientras que de el segundo utilizaremos las libreras que nos ayudaran a compilar y ejecutar el reporte
que son las siguientes:
3. Libreras a Utilizar ( Bibiotecas )

commons-beanutils-1.7
commons-collections-2.1
commons-digester-1.7
commons-javaflow-20060411
commons-logging-1.0.2
jasperreports-2.0.4
itext-1.3.1 (Importante tener esta librera ya que es la encargada de generar
nuestro reporte en PDF y otros formatos)
MySQL Connector para JAVA (mysql-connector-java-5.0.7-bin): este es
nuestro puente JDBC que nos permitir la conexin entre el servidor de base
de datos y las JSP (viene incluido en Netbeans).
Y para esta versin por supuesto Necesitamos el PLUGIN para Netbeans,
este solo funciona para versiones superiores de la 6.0
4. Dnde conseguir el Software?

Todo el Software utilizado es Open Source y puede descargarlo desde:

http://www.netbeans.org Netbeans 6.0 o superior y en la seccion de PLUGINS encontrara el de
IReport
http://dev.mysql.com/downloads/ MySQL 5.0, Conector para Java y Herramientas Graficas.
http://ireport.sourceforge.net Ireport
4. Caso de Estudio
Para realizar este tutorial, por ahora solo utilizaremos una tabla, y nuestro reporte se generara a partir de recibir un
parmetro, si recuerda en el tutorial pasado lo generbamos a partir de una vista y no reciba parmetros, para este
sencillo caso recibir como parmetro la matricula de un estudiante, y utilizaremos nica y exclusivamente el IReport
que instalaremos dentro de Netbeans, si lo desea puede consultar el manual anterior disponible en esta misma seccin
para verificar el otro reporte.
Instalacin del PLUGIN
Para realizar este Ejemplo, por ahora solo utilizaremos una tabla, y nuestro reporte se generara a partir de recibir un
parmetro, para este sencillo caso recibir como parmetro la matricula de un estudiante, y utilizaremos nica y
exclusivamente el IReport que instalaremos dentro de Netbeans
Paso 1
Prof Arturo Florian Herencia SISE 28-01-2009


Abra su Netbeans IDE, recuerde que este plugin solo se instala en versiones superiores a la 6.0, una vez abierto haga
clic en el men Tools y Seleccione Plugins
Paso 2
Ahora haga clic en la pestaa Downloaded y seguidamente en el botn Add Plugins


Paso 3
Ahora localice la ubicacin del archivo con extensin NBM y despus haga clic en el botn abrir
A continuacin nuestro complemento estar listo para instalarse, notara que aparece la descripcin
en la parte derecha, ahora pulse el botn Install



Prof Arturo Florian Herencia SISE 28-01-2009



Una vez que empiece la instalacin aparecer un Wizard que le guiara, solo haga clic en siguiente y acepte los
trminos de la licencia. Existe la posibilidad de que Netbeans no lo pueda validar, para que la instalacin
contine solo haga clic en continue.

Paso 5
Listo, nuestro IReport se encuentra Instalado, para finalizar haga clic en la pestaa Installed y busque el nuevo
complemento el categora Tools


Prof Arturo Florian Herencia SISE 28-01-2009



Listo
Como podr darse cuenta su Netbeans a cambiado un poco de apariencia, ya que se agregaron varios
componentes como por ejemplo los orgenes de datos (data sources) de IREPORT, adems de las consolas de salida.









Creacin de la Base de Datos
Como primer paso crearemos la base de datos, puede crear la con algun asistente grafico o desde la terminal de
MySQL, utilizaremos solo una tabla o puede seguir usando vistas si es que lo desea, a manera de ejemplo
utilizaremos la siguiente tabla, copie o escriba el siguiente cdigo SQL:

CREATE SCHEMA Reporte;
USE Reporte;
CREATE TABLE Datos(
Matricula CHAR(11) PRIMARY KEY,
Nombre VARCHAR(25),
Apellidos VARCHAR(50),
Domicilio VARCHAR(30),
Grupo VARCHAR(8));

Una vez creada la base de datos, abra Netbeans y cree un nuevo Proyecto como a continuacin se indica:

1. Dirjase al men archivo -> New Project
2. Despus elija Java -> Desktop Application
3. En este paso elija un nombre y una ubicacin, en caso de utilizar Netbeans versin 7, puede indicarle que ser una
aplicacin con BD, de lo contrario elija la opcin bsica, en Netbeans 6 basta con esos Parmetros, finalice el asistente.
Prof Arturo Florian Herencia SISE 28-01-2009






1.Una vez que elijo la aplicacin de base de datos, en la Pestaa Services (Prestaciones) debe elegir Nueva
Conexin con Base de datos(en este caso Netbeans esta en espaol) .Elija la opcin MySQL y configrela como lo
muestra la sig.. Imagen, escriba su nombre de usuario correspondiente y su password, en caso de no tener, puede
dejarlo en blanco. Se debe pulsar el botn Aceptar. Con lo cual se tratara de realizar la conexin con la BD con los
parmetros establecidos. Si es as se visualizara el mensaje de conformidad y se le solicitara que elija el esquema a
utilizar. Seleccionar dbo y aceptar . Se visualizara el icono de la nueva conexin establecida. (activa).


Antes de hacer nuestro reporte crearemos un origen de datos para establecer nuestra conexin y que nuestro reporte
contenga datos reales de la BD,


Prof Arturo Florian Herencia SISE 28-01-2009















Ahora complete los parmetros pedidos, cuando los tenga haga clic en el botn test, si la conexin se realiza con xito
haga clic en save, de lo contrario corrija los que estn mal, si el mensaje de error indica acceso denegado, puede que su
usuario o password sean los incorrectos, u otro problema comn es que el servidor no este activado.



Despus en la pantalla de datasources seleccione el origen Reportes, aunque por default se selecciona el
recin creado. Ya creado nuestro proyecto, disearemos nuestro reporte como se indica:
Click Aqui
Click Aqui
Seleccione Aqu y
despus pulse Next
Prof Arturo Florian Herencia SISE 28-01-2009










Disee el reporte a su gusto, en este caso solo utilizare 4 bandas que son: title, page header, Detail, Page Footer. Las
dems puede eliminarlas haciendo clic derecho sobre la misma y seleccionando Delete Band o estableciendo el valor 0
en las propiedades del lado derecho Disee el reporte a su gusto, en este caso solo utilizare 4 bandas que son: title,
page header, Detail, Page Footer. Las dems puede eliminarlas haciendo clic derecho sobre la misma y seleccionando
Delete Band o estableciendo el valor 0 en las propiedades del lado derecho




Si por algn error elimino alguna que no debera haberse borrado, puede volver activarla desde le Inspector de Ireport.



Agregue a la banda Detail los campos de nuestra tabla, no es necesario agregar un campo esttico y despus uno de
texto, para realizarlo con tan solo arrastrar y soltar siga los siguientes pasos:

1. Haga clic derecho sobre el reporte ubicado en el panel Report Inspector y seleccione Edit Query.
Prof Arturo Florian Herencia SISE 28-01-2009





2.Ahora escriba la consulta:
SELECT * FROM Datos;



Despliegue el nodo Fields del Reporte:



Ahora seleccione uno por uno y arrstrelo a la banda detail, esto nos evitara problemas con el tipo de datos ya que cada
tipo de datos en MySQL tiene un equivalente en JAVA y esto al realizarlo de esta manera se realizara en automatico, por
ejemplo, el VARCHAR equivale a un String, el Int a INT, etc. El reporte habara tomado una forma como la sig.


Prof Arturo Florian Herencia SISE 28-01-2009








Para finalizar al diseo agregue a las bandas restantes lo siguiente:

"Page " + $V{PAGE_NUMBER} + " of "
"" + $V{PAGE_NUMBER}




Al momento de realizar la consulta cometimos una equivocacin (adrede) ya que como mencionamos al principio el
reporte deber recibir un parmetro para que se realice, en este caso recibir la matricula, as que lo que haremos
primero ser agregar el parmetro al reporte y despus escribiremos nuevamente la consulta en su forma correcta. En el
inspector del reporte encontrara un Nodo que dice parameters , clic derecho sobre el y seleccione agregar parameter.



En la banda de propiedades pngale el nombre que desee, en este caso se llamara igual que el campo dela tabla que
nos servir en la condicin, seleccione el tipo de dato que corresponda, en este caso el INT de MySQL corresponde al
Integer de JAVA. En donde dice valor de default puede escribirle alguno para probar y este valor deber ir
encerrado entre comillas dobles.Nuevamente abra el editor de consultas y modifquela como sigue:


Prof Arturo Florian Herencia SISE 28-01-2009



Listo nuestro reporte ha sido generado, recuerde que el archivo jasper y el jrxml estn almacenados en la carpeta del
proyecto.

Agregando Libreras
Enseguida procederemos a agregar las libreras necesarias para ejecutar el reporte y poder guardarlo en distintos
formatos, desplegu el proyecto y sobre la carpeta libreras haga clic derecho y despus seleccione agregar JAR busque
las libreras y seleccinelas.
Despus crearemos una clase de java que ser la encargada de crear y lanzar el reporte, en la siguientes pantalla se
muestra todo el cdigo fuente.

// Importaciones de las librerias

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.*;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.*;
import net.sf.jasperreports.view.save.JRPdfSaveContributor.*;
import net.sf.jasperreports.view.JRViewer.*;
import net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor.*;


*/ Se inicia la Superclase y su constructor ademas se establece la conexin*/

public class IniciarReporte
{
Connection conn=null;

public IniciarReporte()
{
try
{
Class.forName("com.mysql.jdbc.Driver"); //se carga el driver
Conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/reporte","root","");
JOptionPane.showMessageDialog(null,"Conexin establecida");
}
catch (Exception ex)
{
ex.printStackTrace();
Prof Arturo Florian Herencia SISE 28-01-2009


}
}

*/ Se inicia la clase que ejecutara el reporte y se carga el archivo*/

public void ejecutarReporte(String matricula)
{
try
{
String archivo = "Reporte.jasper"; System.out.println("Cargando desde: " + archivo); if (archivo == null)
{
System.out.println("No se encuentra el archivo."); System.exit(2);
}
JasperReport masterReport = null;
try
{
masterReport = (JasperReport) JRLoader.loadObject(archivo);
}
catch (JRException e)
{
System.out.println("Error cargando el reporte maestro: " + e.getMessage()); System.exit(3);
}

/* Se pasan los parmetros introducidos por el usuario*/

//este es el parmetro, se pueden agregar ms parmetros
//basta con poner mas parametro.put
Map parametro = new HashMap();
parametro.put("Matricula",matricula);

//Reporte diseado y compilado con iReport
JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport,parametro,conn);


//Se lanza el Viewer de Jasper, no termina aplicacin al salir
JasperViewer jviewer = new JasperViewer(jasperPrint,false); jviewer.setTitle("Geniz - Reporte");
jviewer.setVisible(true);
}


catch (Exception j)
{
System.out.println("Mensaje de Error:"+j.getMessage());
}

}

/* por ultimo se cierra la conexin*/

public void cerrar()
{
try
{
conn.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
}


Ya creado nuestro proyecto, reporte y la clase que lo lanzara procederemos a agregar un nuevo formulario como se
muestra cuya funcin ser recoger la matricula, que es el parmetro que recibir para realizare la consulta y ejecutar el
reporte:
Prof Arturo Florian Herencia SISE 28-01-2009











Despus solo aada un evento al botn , para ello seleccione el botn y haga doble clic o inclyalo desde la paleta de
propiedades en la ficha eventos. Ahora abra el cdigo fuente del frame y ajstelo como a continuacin se
muestra:

Ejecutando el Reporte
Pues bien hemos terminado, ahora solo ejecute la aplicacin y escrbale algn parmetro que tenga en la BD

Prof Arturo Florian Herencia SISE 28-01-2009




































Prof Arturo Florian Herencia SISE 28-01-2009


















Revisin de Conocimientos
Laboratorio de Lenguaje de Prog-I ( Netbeans)


1 -El Objetivo de la guia es desarrollar la primera aplicacin en Java que interacte con una base de Datos de
Sql Server 2005 (Sistemacont) . Inicialmente se debe configurar el Sql server 2005 para conectarse al servidor
con autentificacin SQL con el Usuario sa y sin contrasea . Luego se procede a restaurar la BD Sistemacont ,
utilizando el archivo backup.















Prof Arturo Florian Herencia SISE 28-01-2009




Ejecutar Netbean 6.5.1 y crear un Nuevo Proyecto denominado Appsistema con la configuracin inicial
siguiente:





















Con lo cual se creara el paquete inicial denominado appsistema y en su interior la clase Principal que contiene
el mtodo main ( punto inicial de ejecucin de toda aplicacin en Java).

Prof Arturo Florian Herencia SISE 28-01-2009














Adicionalmente se debe crear los siguientes Paquetes dentro de Source Packages:





forms .- Contendr todos los Frames ( formularios) de la Aplicacin. Tambin se le denomina ui , Cliente, interfaz


modelo.- contendr todas las clases no visuales que se obtienen de realizar la abstraccin para resolver el
problema( Ejemplo: ConexBD, Usuario, UsuarioBD, Personal ,PersonalBD,etc).


resources.- Contendr las imgenes, videos y diversos recursos multimedia que utiliza la aplicacin.



El siguiente paso es fundamental: Agregar a la seccin de Libraries del Proyecto el Archivo controlador de la
BD (driver) a utilizar ,en este caso es sqljdbc.jar .








La aplicacin utilizara las diversas clases e interfaces que
incorpora el driver o archivo controlador de la BD, as
como sus mtodos correspondientes , para acceder a las
operaciones a la BD.





-Incorporar al paquete modelo la clase base ConexBD.java que ha sido desarrollada en clase y realiza la
Prof Arturo Florian Herencia SISE 28-01-2009


conexin inicial con una Base de Datos especifica. Verificar que el paquete que utiliza ConexBD se llame
modelo. ( package modelo;)
Prof Arturo Florian Herencia SISE 28-01-2009






-Crear los siguientes Formularios JFrame Form en el paquete forms:

FrmAcceso Frmmenu
















txtusu txtclave

2-Crear la clase Usuario dentro del paquete modelo, la cual contendr los atributos que contiene cualquier
usuario de la aplicacin : usuario, clave y nivel. Los 3 atributos son de tipo cadena y que debe corresponder con
los campos de la tabla usuario. Se deben encapsular los campos de esta clase( crear los Mtodos get y set)

package modelo;

public class Usuario {
protected String usuario;
protected String clave;
protected String nivel;
public Usuario(){
usuario="";
clave="";
nivel="";
Prof Arturo Florian Herencia SISE 28-01-2009


}
public Usuario(String usuario, String clave, String nivel){
this.usuario=usuario;
this.clave=clave;
this.nivel=nivel;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}

public String getClave() {
return clave;
}

public void setClave(String clave) {
this.clave = clave;
}

public String getNivel() {
return nivel;
}

public void setNivel(String nivel) {
this.nivel = nivel;
}
Prof Arturo Florian Herencia SISE 28-01-2009


}




3-Crear la clase UsuarioBD dentro del paquete modelo , que hereda de la clase ConexBD sus atributos y
mtodos. Posteriormente Ud. creara las clases PersonalBD, VentasBD y ProductosBD que tambin tienen como
clase padre a ConexBD. El contenido de la clase UsuarioBD sera:


package modelo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UsuarioBD extends ConexBD {
private Usuario usuario;
private String tabla;

public UsuarioBD(String bd){
super(bd);
tabla="Usuarios";
try{
st= cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs= st.executeQuery("Select * from "+tabla);
}catch(SQLException e1){
System.out.println("ERROR SQL:"+ e1.getMessage());
}
}
public boolean insertar (Usuario u){
sql="insert into "+ tabla + " values('" +u.getUsuario()+
"','"+u.getClave()+"','"+ u.getNivel() +"')";
try{

st=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
st.executeUpdate(sql);
rs = st.executeQuery("SELECT * FROM "+tabla);
return true;
}
catch(SQLException e1){
System.out.println("ERROR SQL:"+ e1.getMessage());
return false;
}
}

Prof Arturo Florian Herencia SISE 28-01-2009


public boolean eliminar (String usuario){
sql="delete from "+ tabla + " where usuario='" +usuario+ "'";
try{
st=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
st.executeUpdate(sql);
rs = st.executeQuery("SELECT * FROM "+tabla);
return true;
}
catch(SQLException e1){
System.out.println("ERROR SQL:"+ e1.getMessage());
return false;
}
}
}
Prof Arturo Florian Herencia SISE 28-01-2009


4-Agregar los Mtodos de Acceso getXX y setXX a los 2 atributos de esta clase (usuario y tabla), en total son 4
mtodos a generar:

-getUsuario, setUsuario, getTabla y setTabla.

Para lo cual sealar un atributo de la clase UsuarioBD pulsar el botn derecho del mouse y sealar

-Refactor

-Encapsulate Fields ( Encapsular los campos o atributos, es decir generar los mtodos get y set)

-Sealar las casillas de los 4 mtodos y pulsar el botn refactor( refactorizar).


5-Modificar la cabecera de la clase FrmAcceso agregando el objeto u1 que se instancia de la clase UsuarioBD y
tambin modificar el constructor para hacer la conexin con la bd sistemacont.

public class FrmAcceso extends javax.swing.JFrame {
UsuarioBD u1;
/** Creates new form FrmUsuario */

public FrmAcceso() {

initComponents();

u1= new UsuarioBD("sistemacont");

}


-Agregar el siguiente cdigo al botn Aceptar:

private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {
String usuario, clave;
usuario=txtusu.getText();
clave=new String (txtclave.getPassword());
boolean hallado= false;
try
Prof Arturo Florian Herencia SISE 28-01-2009


{
ResultSet rs= u1.getSt().executeQuery("select * from usuarios where usuario='"+ usuario+ "' and
clave='"+ clave+"'" );
if (rs.next())
{ // si el usuario y clave son las correctas se procedea mostrar el menu principal maximizado
Frmmenu m1=new Frmmenu ();
m1.setExtendedState( Frmmenu.MAXIMIZED_BOTH);
m1.setVisible(true);
this.setVisible(false);
}
else
{ // sino se muestra un mensaje de error
JOptionPane.showMessageDialog(null, "Usuario o Clave Incorrecta");
hallado=false;
}

}
catch(SQLException e1){
System.out.println("ERROR SQL:"+ e1.getMessage());
}
}
Prof Arturo Florian Herencia SISE 28-01-2009





Frmmenu (JFrame Form)
























Prof Arturo Florian Herencia SISE 28-01-2009

















-Crear el Formulario FrmUsuario de la clase JDialog Form en el paquete forms.

FrmUsuario (JDialog Form ) formulario modal









tblusuarios
( JTable )
Prof Arturo Florian Herencia SISE 28-01-2009






txtusu
txtclave

txtnivel









Modificar la cabecera de la clase FrmUsuario agregando el Atributo u1 que se instancia de la clase
UsuarioBD y tambin modificar el constructor para hacer la conexin con la bd sistemacont.


public class FrmUsuario extends javax.swing.JDialog {
UsuarioBD u1;
/** Creates new form FrmUsuario */

public FrmUsuario(java.awt.Frame parent, boolean modal) {

super(parent, modal);

initComponents();

u1=new
UsuarioBD("s
istemacont");
Prof Arturo Florian Herencia SISE 28-01-2009











Agregar estas
2 lineas

}

-Para realizar el Movimiento a travs de los registros de la tabla con los botones de Desplazamiento ( primero,
anterior, siguiente , ultimo) , crearemos el mtodo cargarReg el cual tiene un parmetro que de tipo enumerado
que especificar cual registro deseamos visualizar en el formulario. Agregar este mtodo despus de la llave de
cierre del constructor:


enum Movimiento {PRIMERO, ANTERIOR,SIGUIENTE,ULTIMO};
private void cargarReg(Movimiento r ){
try{
ResultSet rsusu=u1.getRs();
switch (r)
{
case PRIMERO:
rsusu.first(); break;
case ANTERIOR:
rsusu.previous();break;
case SIGUIENTE:
rsusu.next();break;
case ULTIMO:
rsusu.last();break;
}
txtusu.setText(rsusu.getString(1));
269


txtclave.setText(rsusu.getString(2));
txtnivel.setText(rsusu.getString(3));

}catch (SQLException e1){
System.out.println("ERROR SQL en cargarReg:"+ e1.getMessage());
}
}


-El cdigo para el botn Guardar (btnguardar) de la Ficha de Mantenimiento de es:

private void btnguardarActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:
String usuario=txtusu.getText(); String
clave=txtclave.getText(); String
nivel=txtnivel.getText();
Usuario usu =new Usuario(usuario,clave,nivel);

if (u1.insertar(usu)==true )
JOptionPane.showMessageDialog(this, "Registro Guardado");
else

JOptionPane.showMessageDialog(this, "ERROR al Guardar Registro");

}

-Cdigo del botn Listado:

private void btnlistadoActionPerformed(java.awt.event.ActionEvent evt) {
DefaultTableModel modelo1 =(DefaultTableModel)tblusuarios.getModel();
modelo1.setRowCount(0);
try

{

ResultSet rs=u1.getRs();
270






rs.beforeFirst();
while(rs.next()){
Object [] datos={rs.getString(1),rs.getString(2),rs.getString(3) };

modelo1.addRow(datos);

}

}catch(SQLException e1){

System.out.println("Error SQL:"+e1.getMessage());

}


}





























Interfaz CallableStatement
271


Una vez que hemos establecido una conexin con una base de datos, podemos usar el mtodo
Connection.prepareCall para crear una sentencia callable. Estas sentencias nos permite ejecutar prodecimientos
almacenados SQL. El siguiente ejemplo crea un objeto CallableStatement con tres parmetros para
almacenar informacin de la cuenta de login:

CallableStatement cs = con.prepareCall("{call accountlogin(?,?,?)}");
cs.setString(1,theuser);
cs.setString(2,password);
cs.registerOutParameter(3,Types.DATE);
cs.executeQuery();
Date lastLogin = cs.getDate(3);

Interfaz PreparedStatement
El interface PreparedStatement desciende del interface Statement y usa una plantilla para crear peticiones SQL. Se
usa una PreparedStatement para enviar sentencias SQL precompiladas con uno o ms parmetros. Query
PreparedStatement: Creamos un objeto PreparedStatement especificando la definicin de plantilla y la situacin de
los parmetros. Los datos de los parmetros se insertan dentro del objeto PreparedStatement llamando a
sus mtodos setXXX y especificando el parmetro y su dato. Las instrucciones SQL y los parmetros son enviados
a la base de datos cuando se llama al mtodo executeXXX. Este segmento de cdigo crea un objeto
PreparedStatement para seleccionar datos de usuarios basados en la direccin email del usuario. El interrogante
("?") indica que este sentencia tiene un parmetro:

PreparedStatement pstmt = con.prepareStatement ( "select theuser from registration where
emailaddress like ? ") ;
//Inicializando el primer parametro con email address
pstmt.setString(1, emailAddress);
ResultSet results = ps.executeQuery();
Una vez que se ha inicializado la plantilla PreparedStatement slo se insertan los
valores modificados para cada llamadas:
pstmt.setString(1, anotherEmailAddress);

Nota: No todos los drivers de bases de datos compilan sentencias preparadas. Update PreparedStatement: Este
segmento de cdigo crea un objeto PreparedStatement para actualizar el registro de un vendedor. La plantilla
tienecinco parmetros, que se seleccionan con cinco llamadas a los mtodos PreparedStatement.setXXX
apropiados.
PreparedStatement ps = con.prepareStatement("insert into registration(theuser, password,emailaddress, creditcard,
Balance ) values ( ?, ?, ?, ?, ?)");
ps.setString(1, theuser);
ps.setString(2, password);
ps.setString(3, emailaddress);
ps.setString(4, creditcard);
ps.setDouble(5, balance);
ps.executeUpdate();

Cachear los Resultados de la Base de Datos
El concepto PreparedStatement de reutilizar peticiones puede extenderse al cacheo de resultados de una llamada
JDBC. Por ejemplo, una descripcin de un tem de la subastas permanece igual hasta que el vendedor lo cambia. Si
el tem recibe cientos de peticiones, el resultado de la sentencia: query "select description from auctionitems where
item_id='4000343'" podra ser almacenado de forma ms eficiente en un tabla hash. Almacenar resultados en una
tbal hash requiere que la llamada JDBC sea interceptada antes de crear una sentencia real que devuelva los
resultados cacheados, y la entrada del cach debe limpiarse si hay una actualizacin correspondiente con ese
item_id. Hoja de Resultados El interface ResultSet maneja accesos a datos devueltos por una consulta. Los datos
devueltos son igual a una lnea de la base de la tabla de la base de datos. Algunas consultas devuelven una lnea,
mientras que muchas consultas devuelven mltiples lneas de datos. Se utilizan los mtodos getType para recuperar
datos desde columnas especficas para cada fila devuelta en la consulta. Este ejemplo recupera la columna TEXT
de todas las tablas con una columna TEXT en la base de datosdba. El mtodo results.next mueve hasta la siguiente
fila recuperada hasta que se hayan procesado todas las filas devueltas:

Statement stmt = con.createStatement();
ResultSet results = stmt.executeQuery("SELECT TEXT FROM dba ");
while(results.next()){
String s = results.getString("TEXT");
272




displayText.append(s + "\n");
}
stmt.close();








































La interfaz DatabaseMetaData y ResultsetMetaData
Metadatos

Hay casos en los que se requiere conocer la estructura de una base de datos (nombre y diseo de las
tablas, tipos de los campos, etc.). Los datos que describen la estructura de las bases de datos es lo que se
conoce como metadatos.
273


Los metadatos se obtienen utilizando el mtodo getMetaData de la clase Connection., por lo que es
el objeto de la conexin el que permite obtener estos metadatos. El resultado de este mtodo es un objeto
de clase DatabaseMetaData.

//Si con es el objeto Connection:
DatabaseMetaData metadatos=con.getMetaData();

mtodos de la clase DatabaseMetadata

Una vez obtenido el objeto se pueden utilizar estos mtodos para obtener informacin sobre la base de
datos:
274




mtodo de DatabaseMetadata uso
boolean allTablesAreSelected() Indica si se pueden utilizar todas las tablas
devueltas por el mtodo getTables
boolean deletesAreDetected(int tipo) Devuelve true si las filas borradas en un conjunto
de resultados (objeto ResultSet)
pueden ser detectados por el mtodo
rowDeleted de la clase ResultSet.
El parmetro tipo indica el tipo de conjunto de
resultados
(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.TYPE_SCROLL_INSENSITIVE o
ResultSet.TYPE_SCROLL_SENSITIVE).
ResultSet getCatalogs() Devuelve una tabla de resultados ResultSet
cuyo contenido es la columna
TABLE_CAT y donde cada fila es un registro que
representa un catlogo de la base de datos.
String getCatalogSeparator() Devuelve los caracteres que separan el
nombre del catlogo respecto del nombre de
una tabla.
275


ResultSet getColumns(String catlogo,
String plantillaEsquema, String
plantillaTabla, String plantillaCampo)
Obtiene una tabla de resultados
(ResultSet) en la que cada fila es un campo que
cumple el nombre de campo indicado en
la plantilla de campo (que puede ser null).
Adems los campos pertenecen a la tabla
indicada en el catlogo (un catlogo agrupa
esquemas, puede ser null) y plantilla de esquema (un
esquema agrupa tablas relacionadas y puede ser null)
sealados.
El conjunto de resultados posee 22
columnas. Las fundamentales son:

TABLE_CAT. Catlogo de la tabla.
TABLE_SCHEM. Esquema de la tabla.
TABLE_NAME. Nombre de la tabla
COLUMN_NAME. Nombre del campo.
DATA_TYPE. Un entero que indica el tipo. Se
puede comparar con las constantes de la clase
java.sql.Types.
TYPE_NAME. Nombre del tipo de datos de la
columna segn las directrices del gestor de base
de datos empleado

COLUMN_SIZE. Entero que indica el tamao
del campo

DECIMAL_DIGITS. Nmero de dgitos decimales.




mtodo de DatabaseMetadata uso

IS_NULLABLE. Cadena YES o
NOque indica si el campo puede contener nulos.
Connection getConnection() Devuelve el objeto Connection relacionado con este
objeto
String getDatabaseProductName() Devuelve el nombre comercial del sistema gestor
de base de datos en uso
String getDatabaseProductVersion() Devuelve la versin de producto del sistema de base
de datos en uso
int getDriverMajorVersion() Devuelve el nmero mayor de versin del driver
JDBC
int getDriverMinorVersion() Devuelve el nmero menor de versin del driver
JDBC
String getDriverName() Devuelve el nombre del driver JDBC en uso
String getIdentifierQuoteString() Devuelve el carcter utilizado para delimitar nombres
de campo o de tabla en la base de
datos (normalmente la comilla simple). Si se
devuelve un espacio en blanco es que no
hay delimitador.
ResultSet getImportedKeys(String
catalog, String schema, String tabla)
Obtiene un conjunto de resultados que describe
la clave de la tabla indicada para el
catlogo y esquema correspondientes (si no hay
catlogo o esquema se indica null). ResultSet getIndexInfo(String catalog,
String schema, String tabla, boolean
nica, boolean aproximacin)
Obtiene un conjunto de resultados que describe
los ndices de la tabla indicada.
int getMaxColumnNameLength() Devuelve el mximo nmero de caracteres que
puede poseer un campo en esta base de
datos. int getMaxColumnsInGroupBy() Obtiene el mximo nmero de elementos que
pueden indicarse parea esta base de
datos en la clusula GROUP BY de una
sentencia SQL int getMaxColumnsInIndex() Devuelve el mximo nmero de campos que se
pueden colocar en un ndice para esta
base de datos int getMaxColumnsInOrderBy() Obtiene el mximo nmero de elementos que
pueden indicarse para esta base de
datos en la clusula ORDER BY de una
sentencia SQL int getMaxColumnsInSelect() Devuelve el mximo nmero de elementos que
pueden indicarse en una instruccin SELECT para
esta base de datos


int getMaxColumnsInTable() Devuelve el mximo nmero de campos que puede
poseer una tabla de la base de datos.




mtodo de DatabaseMetadata uso
int getMaxConnections() Obtiene el nmero mximo de conexiones
concurrentes que pueden abrirse para esta
base de datos. int getMaxIndexLength() Devuelve el mximo nmero de bytes que puede
tener un ndice de la base de datos.
int getMaxRowSize() Devuelve el mximo nmero de bytes que puede
tener un registro de la base de datos.
int getMaxStatements() Obtienen el mximo nmero de objetos de consulta
(Statements) que se pueden crear
usando esta base de datos. int getMaxTableNameLength() Obtiene el mximo nmero de caracteres que
puede tener el nombre de una tabla en
esta base de datos. int getMaxTablesIn Select() Obtiene el mximo nmero de tablas que pueden
intervenir en una consulta SELECT
String getNumericFunctions() Obtiene una lista de las funciones internas de tipo
numrico de esta base de datos separadas por
comas.
ResultSet getPrimaryKeys(String
catlogo, String esquema, String tabla)
Obtiene una tabla de resultados
(ResultSet) cuyos registros representan una tabla
del esquema (que puede ser null)
y catlogo (tambin puede ser null)
indicados. La tabla posee estas columnas:

TABLE_CAT. Nombre del catlogo
(puede ser null)
TABLE_SCHEM. Nombre del
esquema (puede ser null).
TABLE_NAME. Nombre de la tabla
COLUMN_NAME. Nombre del
campo que forma parte de la clave primaria.
KEY_SEQ. Nmero de secuencia
(short)
PK_KEY. Nombre de la clave (puede ser null)
String getSQLKeywords() Devuelve una cadena con todos los
comandos, separados por comas, SQL
reconocidos por el gestor de bases de datos en uso
que no son parte de SQL ANSI 92. String getStringFunctions() Obtiene una lista de las funciones internas de tipo
String de esta base de datos separadas por comas.


String getSystemFunctions() Obtiene una lista de las funciones internas de
sistema de esta base de datos separadas
por comas.




mtodo de DatabaseMetadata uso
ResultSet getTables(String catlogo,
String plantillaEsquema, String
plantillaTabla, String tipos[])
Obtiene una tabla de resultados (ResultSet)
en la que cada fila es una tabla del catlogo
(un catlogo agrupa esquemas, puede ser null),
plantilla de esquema (un esquema agrupa tablas
relacionadas y puede ser null), patrn de nombre
de tabla (permite indicar nombres de tabla) y tipo
indicado.
El tipo se indica con un array String que puede
contener como elementos:

TABLE. Tabla normal.

VIEW. Vista.

SYSTEM TABLE. Tabla de sistema

GLOBAL TEMPORARY. Tabla
temporal.

LOCAL. Tabla Local.

Si el tipo es null se obtendrn todas las tablas
de la base de datos.
El conjunto de resultados posee cinco
columnas, que son:

TABLE_CAT. Catlogo de la tabla.

TABLE_SCHEM. Esquema de la tabla.

TABLE_NAME. Nombre de la tabla

TABLE_TYPE. Tipo de tabla.

REMARKS. Comentarios.
ResultSet getTablesTypes() Obtiene un ResultSet donde cada registro es un
tipo de tabla soportado por el gestor
de bases de datos. String getURL() Obtiene una cadena con el URL del sistema gestor
de bases de datos.
String getUserName() Devuelve el nombre de usuario actual del gestor
de bases de datos.
boolean isReadOnly() Indica si la base de datos es de slo lectura
boolean nullsAreSortedAtEnd() Indica si los valores nulos aparecen los ltimos
en una columna ordenada.


boolean nullsAreSortedAtStart() Indica si los valores nulos aparecen los
primeros en una columna ordenada.




mtodo de DatabaseMetadata uso
boolean othersDeletesAreVisibles() Indica si los registros borrados por otros usuarios
son visibles.
boolean othersInsertsAreVisibles() Indica si los registros insertados por otros usuarios
son visibles.
boolean othersUpdatesAreVisibles() Indica si los registros actualizados por otros usuarios
son visibles.
boolean ownDeletesAreVisibles() Indica si nuestros registros borrados son visibles.
boolean ownInsertsAreVisibles() Indica si nuestros registros insertados son visibles.
boolean ownUpdatesAreVisibles() Denota si nuestros registros actualizados son
visibles.
boolean storesLowerCaseIdentifiers() Indica si los identificadores de la base de datos
sin delimitador son almacenados en minsculas.
boolean storesLowerCaseQuotedIdentifiers() Indica si los identificadores de la base de datos
con delimitador son almacenados en
minsculas. boolean storesMixedCaseIdentifiers() Denota si los identificadores de la base de datos
sin delimitador son almacenados en
minsculas o maysculas. boolean storesMixedCaseQuotedIdentifiers() Indica si los identificadores de la base de datos
con delimitador son almacenados en
minsculas o maysculas. boolean storesUpperCaseIdentifiers() Indica si los identificadores de la base de datos
sin delimitador son almacenados en minsculas.
boolean storesUpperCaseQuotedIdentifiers() Indica si los identificadores de la base de datos
con delimitador son almacenados en
maysculas. boolean supportsAlterTableWithAddColumn() Indica si la base de datos permite aadir
columnas usando la instruccin SQL
ALTER TABLE boolean supportsAlterTableWithDropColumn() Indica si la base de datos permite borrar
columnas usando la instruccin SQL
ALTER TABLE boolean supportsANSI92FullSQL() Denota si el SQL ANSI 92 est
completamente soportado por la base de datos
boolean supportsBatchUpdates() Indica si la base de datos admite procesos por
lotes.
boolean supportsCorrelatedSubqueries() Indica si la base de datos soporta
instrucciones SELECT anidadas


boolean supportsGroupBy() Indica si la base de datos soporta la clusula
GROUP BY en la instruccin SELECT




mtodo de DatabaseMetadata uso
boolean supportsLikeEscapeClause() Indica si la base de datos soporta la clusula
LIKE en la instruccin SELECT boolean suportsMixedCaseIdentifiers() Indica si el nombre de los identificadores sin
delimitador de la base de datos cuando
combinan maysculas y minsculas se
almacenan de esta manera o no.
boolean
supportsMixedCaseQuotedIdentifiers()
Indica si el nombre de los identificadores con
delimitador de la base de datos cuando
combinan maysculas y minsculas se
almacenan de esta manera o no. boolean supportsOrderByUnrelated() Denota si la clusula ORDER BY puede utilizar
campos diferentes de los enunciados
en el SELECT boolean supportsResultSetConcurrency(int
tipo, int concurrencia)
Indica si la base de datos soporta la
concurrencia indicada para el tipo
remarcado (vase el mtodo
createStatement de la clase Connection, pgina
267). boolean supportsResultSetType(int tipo) Indica si los ResultSet obtenidos desde esta base de
datos pueden ser del tipo indicado,
(vase el mtodo createStatement de la clase
Connection, pgina 267).
boolean supportsSelectForUpdate() Indica si el SQL de la base de datos permite
instrucciones SELECT FOR UPDATE
boolean supports Transactions() Indica si la base de datos soporta
transacciones
boolean updatesAreDetected() Indica si se pueden detectar filas
actualizadas con el mtodo rowUpdated de la
clase ResultSet
boolean usesLocalFiles() Indica si la base de datos almacena archivos locales

En este listado slo se han sealado las instrucciones ms utilizadas, hay el doble de mtodos en realidad
con respecto a los aqu sealados.

Metadatos de una consulta

El mtodo getMetaData de la clase ResultSet da como resultado un objeto de tipo ResultSetMetaData
que devuelve informacin de control del conjunto de resultados. Sus mtodos ms interesantes son:

mtodo de ResultSetMetaData uso
int getColumnCount() Obtiene el nmero de columnas del
conjunto de resultados


int getColumnDisplaySize(int
nmeroDeColumna)
Indica la anchura que se destina en pantalla a
mostrar el contenido de la columna indicada




mtodo de ResultSetMetaData uso
String getColumnName(int nColumna) Devuelve el nombre de la columna con el nmero
indicado
int getColumnType(int nColumns) Obtiene el tipo de datos SQL estndar de la columna
indicada
int getColumnTypeName(int nColumna) Obtiene el tipo de datos compatible con la base de
datos en uso de la columna indicada
int getPrecission(int nColumna) Devuelve la precisin de decimales de la
columna dada
int getScale(int nColumna) Obtiene el nmero de decimales que se
muestran de la columna
boolean isAutoincrement(int nColumna) Indica si el campo es autoincrementable.
boolean isCaseSensitive(int nColumna) Indica si la columna distingue entre
maysculas y minsculas
boolean isReadOnly(int nColumna) Indica si el campo es de slo lectura.
boolean isSearchable(int nColumna) indica si la columna puede figurar en el apartado
WHERE de una consulta SELECT
boolean isSigned(int nColumna) Indica si la columna posee nmeros con signo





























Manejo de Capas
JDBC especifica una serie de clases y mtodos para permitir a cualquier programa Java una forma homognea de
acceso a sistemas de bases de datos. Este acceso se realiza a travs de drivers, que son los que implementan la
funcionalidad especificada en JDBC. Esto es semejante a lo que ofrece ODBC.
La necesidad de JDBC, a pesar de la existencia de ODBC, viene dada porque ODBC es una interfaz escrita en
lenguaje C, que al no ser un lenguaje portable, hara que las aplicaciones Java tambin perdiesen la portabilidad. Y
adems, ODBC tiene el inconveniente de que se ha de instalar manualmente en cada mquina; al contrario de los
drivers JDBC, que al estar escritos en Java son automticamente instalables, portables y seguros.
JDBC permite ciertas facilidades, como realizar la actualizacin de mltiples registros con un solo comando o
acceder a mltiples servidores de bases de datos dentro de una transaccin simple. Adems permite reutilizar las
conexiones a la base de datos (proceso que se conoce como connection pooling), de modo que no se necesita
realizar una nueva conexin a la base de datos para cada comando JDBC.
JDBC tambin permite escribir aplicaciones que accedan a datos a travs de sistemas de bases de datos
incompatibles corriendo en plataformas distintas, basndose en que Java se puede ejecutar sobre plataformas
hardware y sistemas operativos diferentes.El API JDBC soporta dos modelos diferentes de acceso a bases de datos,
los modelos de dos capas y de tres capas.

Modelo de dos capas (Cliente-Servidor)
Este modelo se basa en que la conexin entre la aplicacin Java o el applet que se ejecuta en el navegador, se
conectan directamente a la base de datos.





Esto significa que el driver JDBC especfico para conectarse con la base de datos, debe residir en el sistema
local. La base de datos puede estar en cualquier otra mquina y se accede a ella mediante la red. Esta es la
configuracin tpica Cliente/Servidor: el programa cliente enva instrucciones SQL a la base de datos, esta
las procesa y enva los resultados de vuelta a la aplicacin.
Modelo de tres capas
En este modelo de acceso a las bases de datos, las instrucciones son enviadas a una capa intermedia entre
Cliente y Servidor, que es la que se encarga de enviar las sentencias SQL a la base de datos y recoger el
resultado desde la base de datos, vase la figura. En este caso el usuario no tiene contacto directo, ni
siquiera a travs de la red, con la maquina donde reside la base de datos.




ARQUITECTURA 3 CAPAS

Definicin: Es un estilo de programacin, su objetivo primordial es la separacin de la capa de presentacin, capa
de negocio y la capa de datos.







La ventaja principal: Es el desarrollo se puede llevar a cabo en varios niveles y, en caso de que
sobrevenga algn cambio.
En el diseo de sistemas informticos actuales se suele usar las arquitecturas multilineal o
Programacin por capas.
Adems, permite distribuir el trabajo de creacin de una aplicacin por niveles; cada grupo de
trabajo est totalmente abstrado del resto de niveles, de forma que basta con conocer la API que
existe entre niveles.
API (Application Programming Interface)
Es el conjunto de funciones y procedimientos o mtodos que ofrece cierta biblioteca para ser
utilizado por otro software como una capa de abstraccin.
Ejemplos:
API de Java
Microsoft Framework .NET
API for SCSI device interfacing
Javascript-C de Mozilla
Symfony para PHP
1.) Capa de presentacin.- Esta capa es la que ve el usuario , presenta el sistema al usuario, le comunica la
informacin y captura la informacin del usuario en un mnimo de proceso.
Esta capa se comunica nicamente con la capa de negocio. Tambin es conocida como interfaz grfica y
debe tener la caracterstica de ser "amigable" para el usuario generalmente se presentan como formularios.
Ejemplo de formulario






2.) Capa de negocio
Aqu es donde, se reciben las peticiones del usuario y se envan las respuestas tras el proceso. Se denomina capa
de negocio (e incluso de lgica del negocio) porque es aqu donde se establecen todas las reglas que deben
cumplirse. Esta capa se comunica con la capa de presentacin, para recibir las solicitudes y presentar los resultados,
y con la capa de datos, para solicitar al gestor de base de datos para almacenar o recuperar datos de l.





Toda aplicacin tiene cdigo para implementar reglas de negocios.
Se puede seleccionar almacenar la lgica de negocios sobre cada estacin de cliente, u optar por ejecutar la
lgica de negocios sobre un servidor de aplicaciones.
No toda la lgica de negocio es la misma algunas no requieren un frecuente acceso a los datos, pero una
interface de usuario robusta necesitara de la lgica de negocios para la validacin en la entrada de campos,
clculos en tiempo real u otras interacciones de usuarios.
3)Capa De Datos
Es donde residen los datos y es la encargada de acceder a los mismos. Est formada por uno o ms
gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de
almacenamiento o recuperacin de informacin desde la capa de negocio.

Ejemplo









Procedimientos Almacenados




























Diseo de una Aplicacin Final
Aplicacion Practica
A continuacin se listarn algunos ejercicios prcticos de conexiones a Access y a SQL Server por medio de JDBC.
Observacin: Para los ejemplos se hace uso de Oracle JDeveloper 10g.
Ejemplo con Access
1. Cree la base de datos de Access con el nombre dbdata, en ella cree una tabla de prueba denominada
persona, esta tabla tendr como campos a DNI, Nombre y Edad. Guarde esta base datos en C:\jdbc.
2. En JDeveloper cree una aplicacin nueva con el nombre AccessJDBC.

3. Luego de creada la aplicacin, se le pedir la creacin del proyecto, al cual denominar Project1.

4. Haga clic derecho sobre el proyecto, seleccione Properties, luego en la ventana seleccione Run/Debug, haga
clic en Edit, seleccione Tool Settings y habilite la entrada de informacin por parte del usuario:





5. Agregue una clase ejecutable al proyecto y denomnela jdbc_conexion_access tal como se muestra en la
siguiente imagen:

6. En la clase haga un import a java.sql.* y al java.util.*. Luego escriba el siguiente cdigo:
package project1;
import java.sql.*;
import java.util.*;
public class jdbc_conexion_access {
public static void main(String[] args) {
Scanner Leer=new Scanner(System.in);
String nombre,DNI,consult=new String();
int edad;
consult="";
try {
/*** Registro de driver y conexin a base de datos ****/
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:/jdbc/dbdata.mdb", "", "");
/**Creando el Statement**/
Statement sentencia = con.createStatement();
/*** Ingreso de datos condicional ****/




while((consult.equals("S")||consult.equals("N"))==false){
System.out.print("Desea ingresar datos? (S/N):");
consult=Leer.next();
}
if(consult.equals("S")){
System.out.print("Ingrese DNI:");
DNI=Leer.next();
System.out.print("Ingrese nombre: ");
nombre=Leer.next();
System.out.print("Ingrese EDAD:");
edad=Leer.nextInt();
/***** Ejecutar sentencia SQL para el ingreso de datos a la tabla ********/
sentencia.executeUpdate( "INSERT INTO persona (DNI, nombre,edad) VALUES ('" + DNI + "',
'"+nombre+"',"+edad+")");
}

/***** Ver datos de la tabla ********/
System.out.println(" Tabla de personas");
System.out.println("DNI\tNombre\tEdad");
ResultSet rs = sentencia.executeQuery( "SELECT DNI, nombre,edad FROM persona" );

/*** Recorrer fila a fila el resultado ****/
while ( rs.next() ) {
String res =rs.getString("DNI") +"\t "+ rs.getString("nombre") + "\t" + rs.getInt("edad");
System.out.println( res );
}
/*** Cerramos ***/




sentencia.close();
con.close();
}
catch( ClassNotFoundException e ) { e.printStackTrace(); }
catch (SQLException e) { e.printStackTrace(); }
}
}

7. Ahora compile la clase y obtendr algo similar a:

Ejemplos con SQL Server 2000
Para trabajar con SQL Server 2000 y Java, se debe realizar los siguientes pasos previos:
Actualizar el servidor SQL Server 2000 al Service Pack 2 o posterior.
Descargar e instalar el driver para SQL Server 2000 SP2.
Configurar del driver JDBC en JDeveloper.
Luego de estos pasos previos procederemos a crear las aplicaciones de prueba en JDeveloper de la siguiente
manera:
a) Ejemplo para ver un catlogo de las bases de datos que tiene SQL Server.
1. Cree una aplicacin denominada ApplicationSQL y denomine al proyecto project1.
2. Agregue la referencia al driver de SQL Server a la aplicacin, para esto slo haga clic derecho sobre el proyecto
y en el men contextual elija Project properties.





3. Luego seleccione Libraries en el panel izquierdo de la ventana de propiedades. En la misma ventana haga clic
en el botn Add Library. Lo anterior desplegar la ventana para aadir libreras.

4. En la ventana Add Library haga clic en New y aparecer la ventana para crear la librera en ella haga clic en
Add entry y busque el driver de SQL 2000 para JDBC. El driver normalmente se ubica en C:\Archivos de
programa\Microsoft SQL Server 2000 Driver for JDBC\lib y est compuesto por los archivos Msbase.jar,
mssqlserver.jar y msutil.jar.
5. Cuando se agreg la referencia a este driver la ventana de propiedades debe quedar de la siguiente forma:





6. En el proyecto cree la clase ejecutable SQLCatalog con el siguiente contenido:
import java.*;
public class SQLCatalog {
private java.sql.Connection con = null;
private final String url = "jdbc:microsoft:sqlserver://";
private final String serverName= "localhost";
private final String portNumber = "1433";
private final String databaseName= "Northwind";
private final String userName = "sa";
private final String password = "";
private final String selectMethod = "cursor";
//Indica al controlador que debe utilizar un cursor de servidor
// lo que permite ms de una instruccin activa en una conexin.

private String getConnectionUrl(){
return url+serverName+":"+portNumber+";databaseName="+databaseName+";" +
"selectMethod="+selectMethod+";";
}
private java.sql.Connection getConnection(){
try{




Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password);
if(con!=null)
System.out.println("Conexin correcta.");
}
catch(Exception e){
e.printStackTrace();
System.out.println("Error de seguimiento en getConnection() : " + e.getMessage());
}
return con;
}

/* Mostrar las propiedades del controlador y los detalles de la base de datos */

public void displayDbProperties(){
java.sql.DatabaseMetaData dm = null;
java.sql.ResultSet rs = null;
try{
con= this.getConnection();
if(con!=null){
dm = con.getMetaData();
System.out.println("Informacin del controlador");
System.out.println(" Nombre del controlador: "+ dm.getDriverName());
System.out.println(" Versin del controlador: "+ dm.getDriverVersion ());
System.out.println(" Informacin de la base de datos ");
System.out.println(" Nombre de la base de datos: "+ dm.getDatabaseProductName());




System.out.println(" Versin de la base de datos: "+ dm.getDatabaseProductVersion());
System.out.println("Catlogos disponibles ");
rs = dm.getCatalogs();
while(rs.next()){
System.out.println(" catlogo: "+ rs.getString(1));
}
rs.close();
rs = null;
closeConnection();
}
else System.out.println("Error: No hay ninguna conexin activa");
}
catch(Exception e){
e.printStackTrace();
}
dm=null;
}
private void closeConnection(){
try{
if(con!=null) con.close();
con=null;
}
catch(Exception e){
e.printStackTrace();
}
}




public static void main(String[] args) throws Exception {
SQLCatalog myDbTest = new SQLCatalog();
myDbTest.displayDbProperties();
}
}

7. Compile la clase y obtendr algo similar a lo siguiente:


b) Ejemplo con interfaz grfica SWING para ver los clientes de Northwind.
1. En JDeveloper, cree una aplicacin denominada SQLClientesNorth y denomine al proyecto project1.
2. Al igual que la aplicacin anterior, en la ventana de propiedades del proyecto agregue una referencia al driver
para SQL Server 2000.
3. Haga clic derecho sobre el proyecto y en la ventana New gallery seleccione y expanda Client tier y
seleccione SWING/AWT. En el panel izquierdo seleccione Java application, aparecern las siguientes
ventanas:





4. Ahora en el frame creado, disee la siguiente interfaz:



5. La propiedad text de los botones es la misma que la actionCommand y el JTable tiene la propiedad
autoResizeMode en AUTO_RESIZE_OFF.
6. Haga doble clic sobre el botn filtroy agregue la lnea de cdigo import java.sql.*; y la lnea import
com.microsoft.jdbc.sqlserver.SQLServerDriver; al comienzo del cdigo.
7. El cdigo del formulario debe quedar de la siguiente forma:
import java.awt.Dimension;
import java.sql.*;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
JTable1 y
JScrollPanel
JTextField1 JButton1 JButton2 JButton3




import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import com.microsoft.jdbc.sqlserver.SQLServerDriver;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
public class ClientesNorth extends JFrame {
private JButton jButton1 = new JButton();
private JButton jButton2 = new JButton();
private JButton jButton3 = new JButton();
DefaultTableModel modelo = new DefaultTableModel();
private JTextField jTextField1 = new JTextField();
private JTable jTable1 = new JTable();
JScrollPane jScrollPane1 = new JScrollPane(jTable1);
private JScrollPane jScrollPane2 = new JScrollPane();
public ClientesNorth() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}




private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize(new Dimension(603, 416));
jButton1.setText("Filtro");
jButton1.setBounds(new Rectangle(30, 285, 120, 25));
jButton1.setActionCommand("Filtro");
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jButton2.setText("Limpiar");
jButton2.setBounds(new Rectangle(445, 285, 115, 25));
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
jButton3.setText("Salir");
jButton3.setBounds(new Rectangle(445, 340, 110, 25));
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton3_actionPerformed(e);
}
});
jTextField1.setBounds(new Rectangle(165, 285, 250, 25));




jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jScrollPane2.getViewport().add(jTable1, null);
this.getContentPane().add(jScrollPane2, null);
this.getContentPane().add(jTextField1, null);
this.getContentPane().add(jButton3, null);
this.getContentPane().add(jButton2, null);
this.getContentPane().add(jButton1, null);
jTable1.setCellSelectionEnabled(true);
//nombres a comlumnas
jTable1.setTableHeader(new JTableHeader(jTable1.getColumnModel()));
jTable1.setPreferredScrollableViewportSize(new Dimension(100, 200));
jTable1.setAutoscrolls(false);
jScrollPane2.setBounds(new Rectangle(25, 15, 545, 250));
}
private void llenadata()
{
try{
DriverManager.registerDriver(new SQLServerDriver());
Connection conexion =
DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;User=sa;Passwor
d=;DatabaseName=Northwind");

CallableStatement stmt = conexion.prepareCall("{call sp_javapruebanorthwind (?)}");
stmt.setString(1, this.jTextField1.getText());
ResultSet rs =stmt.executeQuery();
int numeroColumnas=0;
ResultSetMetaData metaDatos = rs.getMetaData();




// Se obtiene el nmero de columnas.
numeroColumnas = metaDatos.getColumnCount();
for(int ass=0 ;ass<numeroColumnas;ass++){
//aadir columnas al modelo
modelo.addColumn(metaDatos.getColumnName(ass+1));
}
Object [] fila = new Object[numeroColumnas];

// Bucle para cada resultado en la consulta
while (rs.next())
{
// Se obtiene cada una de las etiquetas para cada columna
// Se rellena cada posicin del array con una de las columnas de la tabla en base de datos.
for (int i=0;i<numeroColumnas;i++)
fila[i] = rs.getObject(i+1); // El primer ndice en rs es el 1, no el cero, por eso se suma 1.
// Se aade al modelo la fila completa.
modelo.addRow(fila);
}

jTable1.setModel(modelo);
rs.close();
}catch(Exception y)
{
JOptionPane.showMessageDialog(this,y.getMessage());
}
}




private void jButton1_actionPerformed(ActionEvent e) {
jTable1.setPreferredScrollableViewportSize(new Dimension(500, 70));
//asegurarse que modelo es nulo
modelo.setRowCount(0) ;
modelo.setColumnCount(0);
llenadata();
}
private void jButton2_actionPerformed(ActionEvent e) {
//limpiar el modelo
modelo.setRowCount(0);
modelo.setColumnCount(0);
}
private void jButton3_actionPerformed(ActionEvent e) {
this.dispose();
}
}
8. Antes de compilar este aplicativo, debe crear un procedimiento almacenado en SQL Server denominado
sp_javapruebanorthwind con el siguiente contenido:
CREATE procedure sp_javapruebanorthwind
@companya varchar(40)
as
select * from customers where companyname like @companya + '%'
GO
9. Para ejecutar este ejemplo, haga clic derecho sobre Application1.java que se ubica dentro del proyecto de la
aplicacin SQLClientesNorth y sobre el men contextual haga clic en Run. Obtendr lo siguiente:





Puede aplicar un filtro a la consulta:



I. BIBIOGRAFA
A. Balta, Vctor Vsquez, Julio. Guia De Desarrollo En Java Para Aplicaciones Windows. PERU, Ed.
AC Editores. 170 pp.
B. Deitel Deitel . Como Programar en Java -7ma Edicion
C. (ebook) addison wesley - java software solutions - 4th ed - lewis and loftus

You might also like