manual oficial de lenguajed e programacion-i- 3er ciclo (reparado).docx

Upload: saulfloresasto

Post on 09-Oct-2015

68 views

Category:

Documents


1 download

TRANSCRIPT

1. Presentacin..31. Modulo 1. Semana 1: Arreglos Lineales y Matrices ...41. Semana 2: Ordenamiento de datos y Bsqueda de Datos..281. Semana 3: Programacin Orientada a Objetos 401. Semana 4: Manejo de la Clase String 721. Semana 5: Manejo de Archivos .....811. Semana 6: Clases Primitivas .991. Semana 7: Mtodos propios 1161. Semana 8: Ejercicios de Aplicacin1271. Semana 9: Manejo de Capas en una aplicacin en escritorio1331. Bibliografa: 421

PRESENTACINEsta 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.

Contenidos1. Presentacin del curso: NetBeans. Caracteristicas. Versiones. Mdulos NBM.1. Uso del Entorno Integrado. Proceso de desarrollo de un Proyecto. Conponentes Swing.1. Estructura de un Proyecto.1. Base de Datos. Objetos de una BD. Lenguaje SQL . Sentencias Bsicas____________________________________________________________________________NetBeansNetBeans 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 NetBeansLa instalacin de NetBeans es muy sencilla. En la mayora de los casos, basta con descomprimir el archivo ZIP descargado en una unidadde disco con espacio libre suficiente. Para ejecutar NetBeans necesitar cumplir los requisitos tcnicos detallados a continuacin

Componente Caracteristicas

Una plataforma compatible: NetBeans IDE6.8Windows 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 / Netbeans3. 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:

La 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. La 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.

Ventana del Editor

Inspector de ComponentesssVentana de Salida (Output)Explorador de Proyectos

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 ClasePara 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.82. 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>.

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 :proyecto30c) Presione el botn Finish.

Figura 1.104. Desaparecer el asistente para crear una nueva clase y aparecer el esqueleto de la clase creada, 1.11.

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

-Modificar la Clase DenominadaCEjemplo30.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

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 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 lasopciones sin modificar, como se muestra en la figura 1.14, y haga clic en el botn Next>.

Fig 1.13

Fig 1.14JMenuEste 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, JMenuItemsy 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 lazona 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 unode los componentes listados por medio de los mtodos getSelectedIndex() y getSelectedItem(); el primero retorna la posicin del objeto seleccionadoy el segundo retorna un objecto.

JTable - JScrollPaneEste 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

Componenteque facilitaelincrementoo 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 comoun seleccionador de fechas.

Eneste ejemplo,elprimerJSpinneres usado en conjuntocon 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 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 JDBC - 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.

TipoClase 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=clavePor 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 Statementla 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' WHEREsexo='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 SQLtipo Java equivalente

TINYINTbyte

SMALLINTshort

INTEGER o INTint

BIGINTlong

NUMERIC(m,n) o DECIMAL(m,n)java.math.BigDecimal

FLOAT(n)float

REALdouble

CHAR(n)String

VARCHAR(n)String

BOOLEAN o BOOL o BITboolean

DATEjava.sql.Date

TIMEjava.sql.Time

TIMESTAMPjava.sql.Timestamp

BINARYbyte[]

BLOBjava.sql.Blob

CLOBjava.sql.Clob

ARRAYjava.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 datosSQLException

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:

mtodouso

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.

mtodouso

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 registrors.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 datosPara 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 mtodomoveToInsertRow. 2> Actualizar los datos de los campos de ese nuevo registros usando los mtodosupdate (updateString, updateInt, updateBigDecimal,...).

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

4> Colocar el cursor en la posicin anterior utilizando el mtodomoveToCurrentRow.

Borrar registrosSe 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 opcinproperties 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 propiedadVariable Name.

17) Ahora proceda a ejecutar el proyecto tal como se describe a continuacin; ubquese en el proyectoAlumnos 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.

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 esDatosPersonales.

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

DATOSPERSONALESNombreApellidosFechanacTelefonoSalarioFloat

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

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 {

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 internosentencia.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 Tablasentencia.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 elseif ("Insertar".equals(com)) {new Insertar(this) ;} // if Insertar elseif ("Mostrar".equals(com)){new Ver(this);} // if Ver else {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-ddP_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); 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);} // trycatch(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); 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();elseif ("Anterior".equals(com))anterior();elseif ("Primero".equals(com)) Primero();elseif ("Ultimo".equals(com)) Ultimo();else {if (conexion!=null) {try {conexion.close();} // trycatch(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();} // trycatch(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() ;} catch(SQLException e) { } catch(Exception ex) { }} // siguiente

private void anterior() {try {if (resultado.previous())ver_Datos();resultado.refreshRow() ;} // trycatch(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

Para Guardar el Registro presione el botn Incluir, recuerde que el campo fecha de nacimiento el formato de MySQL es YYYY-MM-DD6) 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.

JasperReport ,IReport (Informes de BD en Java)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 DesarrolloNetbeans 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.7commons-collections-2.1commons-digester-1.7commons-javaflow-20060411commons-logging-1.0.2jasperreports-2.0.4itext-1.3.1 (Importante tener esta librera ya que es la encargada de generarnuestro reporte en PDF y otros formatos)MySQLConnectorparaJAVA(mysql-connector-java-5.0.7-bin):esteesnuestro puente JDBC que nos permitir la conexin entre el servidor de basede datos y las JSP (viene incluido en Netbeans).Y para esta versin por supuesto Necesitamos el PLUGINpara Netbeans,este solo funciona para versiones superiores de la 6.04. 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 IReporthttp://dev.mysql.com/downloads/ MySQL 5.0, Conector para Java y Herramientas Graficas. http://ireport.sourceforge.net Ireport4. Caso de EstudioPara 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 exclusivamenteel 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 PLUGINPara 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 exclusivamenteel IReport que instalaremos dentro de Netbeans Paso 1Abra 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 PluginsPaso 2Ahora haga clic en la pestaa Downloaded y seguidamente en el botn Add Plugins

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

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 5Listo, nuestro IReport se encuentra Instalado, parafinalizar haga clic en la pestaa Installed y busque el nuevo complemento el categora Tools

ListoComo 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 DatosComo 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, amanera 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 Project2. Despus elija Java -> Desktop Application3. 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.

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,

Click Aqui

Click Aqui

Seleccione Aqu y despus pulse Next

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 elrecin creado. Ya creado nuestro proyecto, disearemos nuestro reporte como se indica:

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.

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.

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. Endonde 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:

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

Agregando LibrerasEnseguida 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 driverConn=DriverManager.getConnection("jdbc:mysql://localhost:3306/reporte","root",""); JOptionPane.showMessageDialog(null,"Conexin establecida");}catch (Exception ex){ex.printStackTrace();}} */ 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.putMap parametro = new HashMap();parametro.put("Matricula",matricula);

//Reporte diseado y compilado con iReportJasperPrint 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 lanzaraprocederemos 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:

Despus solo aada un evento al botn , para ello seleccione el botny 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 semuestra:

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

Revisin de ConocimientosLaboratorio 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.

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).

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 laBD (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 conexin inicial con una Base de Datos especifica. Verificar que el paquete que utiliza ConexBD se llame modelo. ( package modelo;)

Prof Arturo Florian HerenciaSISE 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="";}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;}

}

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;}}

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;}}}

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{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 maximizadoFrmmenu 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());}}

Frmmenu (JFrame Form)

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

FrmUsuario (JDialog Form ) formulario modal

tblusuarios( JTable )

txtusu txtclave

txtnivel

Modificar la cabecera de la clase FrmUsuario agregando el Atributo u1 que se instancia de la claseUsuarioBD 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("sistemacont");

Agregar estas2 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));

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(); 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 CallableStatementUna 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 paraalmacenar 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 PreparedStatementEl 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 asus 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 losvalores 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 DatosEl 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"); displayText.append(s + "\n"); } stmt.close();

La interfaz DatabaseMetaData y ResultsetMetaDataMetadatos

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.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:

Manual de JavaJDBC

270

275

mtodo de DatabaseMetadatauso

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)puedenserdetectadosporelmtodorowDeleted 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 ResultSetcuyocontenidoeslacolumnaTABLE_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 deuna tabla.

ResultSet getColumns(String catlogo,String plantillaEsquema, StringplantillaTabla, String plantillaCampo)Obtieneunatabladeresultados(ResultSet) en la que cada fila es un campo que cumple el nombre de campo indicado enla 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.Elconjuntoderesultadosposee22 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 DatabaseMetadatauso

IS_NULLABLE.CadenaYESo 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 dedatos (normalmente la comilla simple). Si se devuelve un espacio en blanco es que nohay delimitador.

ResultSet getImportedKeys(Stringcatalog, String schema, String tabla)Obtiene un conjunto de resultados que describe la clave de la tabla indicada para elcatlogo y esquema correspondientes (si no hay catlogo o esquema se indica null).

ResultSet getIndexInfo(String catalog,String schema, String tabla, booleannica, 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 dedatos.

int getMaxColumnsInGroupBy()Obtiene el mximo nmero de elementos que pueden indicarse parea esta base dedatos 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 estabase de datos

int getMaxColumnsInOrderBy()Obtiene el mximo nmero de elementos que pueden indicarse para esta base dedatos 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.

276

mtodo de DatabaseMetadatauso

int getMaxConnections()Obtiene el nmero mximo de conexiones concurrentes que pueden abrirse para estabase 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 crearusando esta base de datos.

int getMaxTableNameLength()Obtiene el mximo nmero de caracteres que puede tener el nombre de una tabla enesta 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(Stringcatlogo, String esquema, String tabla)Obtieneunatabladeresultados (ResultSet) cuyos registros representan una tabla del esquema (que puede ser null)ycatlogo(tambinpuedesernull)indicados. La tabla posee estas columnas:

TABLE_CAT. Nombre del catlogo(puede ser null) TABLE_SCHEM.Nombredel esquema (puede ser null). TABLE_NAME. Nombre de la tabla COLUMN_NAME.Nombredel campo que forma parte de la clave primaria. KEY_SEQ.Nmerodesecuencia(short) PK_KEY. Nombre de la clave (puede ser null)

String getSQLKeywords()Devuelveunacadenacontodos los comandos, separadosporcomas,SQLreconocidos 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 separadaspor comas.

mtodo de DatabaseMetadatauso

ResultSet getTables(String catlogo,String plantillaEsquema, StringplantillaTabla, 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

GLOBALTEMPORARY.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 gestorde 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 DatabaseMetadatauso

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 enminsculas.

boolean storesMixedCaseIdentifiers()Denota si los identificadores de la base de datos sin delimitador son almacenados enminsculas o maysculas.

boolean storesMixedCaseQuotedIdentifiers()Indica si los identificadores de la base de datos con delimitador son almacenados enminsculas 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 enmaysculas.

boolean supportsAlterTableWithAddColumn()Indica si la base de datos permite aadir columnasusandolainstruccinSQLALTER TABLE

boolean supportsAlterTableWithDropColumn()Indica si la base de datos permite borrar columnasusandolainstruccinSQLALTER TABLE

boolean supportsANSI92FullSQL()DenotasielSQLANSI92est completamente soportado por la base de datos

boolean supportsBatchUpdates()Indica si la base de datos admite procesos por lotes.

boolean supportsCorrelatedSubqueries()Indicasilabasededatossoporta instrucciones SELECT anidadas

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

mtodo de DatabaseMetadatauso

boolean supportsLikeEscapeClause()Indica si la base de datos soporta la clusulaLIKE en la instruccin SELECT

boolean suportsMixedCaseIdentifiers()Indica si el nombre de los identificadores sin delimitador de la base de datos cuandocombinan maysculas y minsculas se almacenan de esta manera o no.

booleansupportsMixedCaseQuotedIdentifiers()Indica si el nombre de los identificadores con delimitador de la base de datos cuandocombinan maysculas y minsculas se almacenan de esta manera o no.

boolean supportsOrderByUnrelated()Denota si la clusula ORDER BY puede utilizar campos diferentes de los enunciadosen el SELECT

boolean supportsResultSetConcurrency(inttipo, int concurrencia)Indica si la base de datos soporta la concurrenciaindicadaparaeltiporemarcado(vaseelmtodocreateStatemen