Manual Oficial de Lenguajed e Programacion-I- 3er ciclo (Reparado).docx
Short Description
Download Manual Oficial de Lenguajed e Programacion-I- 3er ciclo (Reparado).docx...
Description
3
…………………………………………………………………… ……………………..
Modulo
Semana 1: Arreglos 1: Arreglos Lineales y Matrices
Semana 2: Ordenamiento de datos y Búsqueda de Datos…….………………. 28
Semana 3: Programación Orientada a Objetos ………………………………… 40
Semana 4: Manejo de la Clase String …………………………………………… 72
Semana 5: Manejo de Archivos
Semana 6: Clases Primitivas
Semana 7: Métodos propios
4
…………………………………………………. ..
81
…………………… …………………… ……………….....
99
………………………………………………………………….
116
…………………………………………………………………
Semana 8: Ejercicios de Aplicación
Presentación
127
………………………………………………………
Semana 9: Manejo de Capas en una aplicación en escritorio
133
……………………
Bibliografía: …………………………………………………………………………………………… 421
PRESENTACIÓN Esta guía didáctica es un material de ayuda institucional, perteneciente a las especialidades de computación, Ing eni ería de Sof tw are e Ing eni ería d e Red es y C o m u n i c a c i o n e s tiene por finalidad proporcionar los conocimientos de la programación orientada a Objetos a los estudiantes del segundo ciclo de estudios. La Organización SISE, líder en la enseñanza tecnológica a nivel superior, promueve la elaboración de materiales educativos, en concordancia a las exigencias de las tecnologías de estos tiempos, que permiten la creación de nuevas herramientas de aprendizaje con el objetivo de facilitar el acceso de los estudiantes a la educación en el marco del desarrollo tecnológico de la informática de las telecomunicaciones. Esta guía permite conocer las herramientas indispensables para la elaboración de aplicaciones con el uso de la técnica O.O. Se inicia con el uso de técnica en manejo de datos en memoria y en el manejo de capas donde estas técnicas básicas se necesitan para dar solución a una determinada proposición o problema. En este proceso el alumno aprenderá instrucciones que le permitirán evaluar expresiones para luego procesar un conjunto de sentencias. También aprenderá el manejo de una aplicación a nivel de contenedores. La implementación y uso de Capas dentro de la aplicación en escritorio permitirán que el alumno aplique la técnica Orientada a objetos. Todas estas herramientas darán 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 edición, servirá para ayudar a nuestros estudiantes SISESINOS.
Contenidos -
Presentación del curso: NetBeans. Caracteristicas. Versiones. Módulos 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 Básicas ____________________________________________________________________________
NetBeans NetBeans es un proyecto de código 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 código abierto NetBeans en junio 2000 y continúa siendo el patrocinador principal de los proyectos. Al día 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 módulos. Un módulo 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 módulo. Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos módulos. Debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fácilmente 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 programación. Existe además un número importante de módulos 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 código abierto de NetBeans dedicado a construir un IDE de primera clase. netbeans.org permite a usuarios de más de 160 países 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 documentación de ayuda en línea, p rofundizar su conocimiento personal de Java, estar al corriente de las últimas noticias, unirse a una lista de distribución, contribuir código, conocer las personas implicadas en el proyecto, conocer gente, y mucho más.
Instalar NetBeans La instalación de NetBeans es muy sencilla. En la mayoría 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 técnicos detallados a continuación
Una plataforma compatible: NetBeans IDE6.8
Windows 2000/XP/Vista; Linux (x86/x64);Solaris
Espacio de disco suficiente:
Dependiendo de la versión que desea instalar; la que menos utiliza es de 45 MB y la completa de
Java JDK 6:
jdk-6u4-windows-i586-p.exe
Cargando la Aplicación:
1. Dar clic al botón de Inicio de Windows. 2. Seleccionar Todos los programas / Netbeans 3. Seleccionar NetBeans IDE 6.8
Nota: Esperar unos instantes, ya que la aplicación tarda unos segundos al cargar completamente. Posteriormente se observará la figura que se muestra a continuación.
Pantalla principal al Iniciar NetBeans IDE 6.8
Creación de un Nuevo Proyecto: 1. En el IDE, seleccione File> New Project, tal como se muestra en la s iguiente figura.
2. En el asistente de New Project, aplicar la categoría de Java y seleccione Java Application,
como se muestra en la siguiente figura. A continuación, haga clic en Next
3. En el Nombre y ubicación de la página 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 línea siguiente puede verse la ubicación del directorio en el que se almacenarán 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) Asegúrese que las casillas de selección: Set as Main Project (Haga que este proyecto sea el proyecto principal) y Create Main Class (Cree la clase principal, la clase con el método main()) estén 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 botón 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 código, y así sucesivamente. Ventana Editor de Código Fuente (Source) con un archivo llamado Guia1Java01 abierto. La Ventana del Navegador , que usted puede utilizar para navegar rápidamente entre los elementos seleccionados dentro de la clase.
Ventana del Editor
Ex lorador
Inspector de Componentes
Ventana
de
Ubicación de los Archivos de un Proyecto( pestaña Files en el Explorador) La figura 1.7, muestra los directorios y archivos generados al crear el proyecto. El código fuente de una clase se guarda en un archivo que tiene el mismo nombre de la clase y con la extensión “.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 l os archivos del proyecto).
Creación 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 opción 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 opción Java en el recuadro Categories: y la opción Java Class en el recuadro File Types:, y luego presionaremos el botón 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 ubicación 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 botón Finish.
Figura 1.10 4. Desaparecerá el asistente para crear una nueva clase y aparecerá el esqueleto de la clase creada, 1.11.
5. Agregue el código de los atributos, constructores y métodos siguientes a la clase:
CCirculo .java
-Modificar la Clase Denominada
CEjemplo30.java
6. Guarde la clase seleccionando del menú principal la opción 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 Aplicación, 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
Pestaña 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.
Generación de los Métodos de Acceso ( getXxx() y SetXxx() ) NetBeans permite la generación automática de los métodos de acceso ( getXxx() y setXxx()) que nos permiten inspeccionar y modificar el valor de los atributos de una clase. Para generar los métodos de acceso de la clase que se encuentra en la ventana de edición se sigue el siguiente procedimiento:
1. Haga clic con el botón derecho en cualquiera de los atributos de la clase y seleccione las opciones Refactor/Encapsulate Fields de los menús emergentes, como se muestra en la figura 1.13.
casillas de los métodos de acceso que deseé generar. Cambie en la caja Combo: Field Visibility a la opción protected, deselecciona la caja de selección: 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 botón Next>.
Fig 1.13
JMenu Este componente per m ite todo pr ogr a ma posee.
agregar la t ípica barra de menús que casi
la misma manera que lo JButton, los menús mostrados en la barra se cambian de texto con clic derecho y luego en “ Edit Text”. De
Para agregar más menús a la barra, se da clic derecho sobre un área vacía la misma barra y al final del cuadro d esplega ble, clic sobre Add JMenu.
Y para agregar Ítems o contenido dentro de cada menú, le da clic derecho sobre el JM enú al que se le quier e a ña dir cont enido y en la con la opción Ad d encontramos los parte inferior de la lista, componentes que se pueden agr egar . Si observa el Inspector de Objetos, se dará cuenta de que bajo la barra y de menú van apar ecien do los JMenu, JMenuIte ms demás componentes que hemos a ñad ido a l menú, asi que para modificar el texto que mostrará cada uno de ellos, es necesar io seleccionar el objeto, y luego en la zona de pr opiedades, con la opción Text, cambiamos dicho texto.
JComboBox añadir los textos Componente que muestra una lista d esp legab le .Para y lu e g o que ser án mostrados en la lista, seleccionamos el ComboBox , en la zona d e pr o pieda des buscamos la opción Model la cua l muestra un cuadro de diálogo que per mite ir aña diendo textos con el botón “ Add”, y Up y contr oles luego de aña dir los, camb iar les de posición con los D own, editar o eliminar su contenido.Este JComboBox per mite acceder a los componentes listados por medio de los métodos de ca da uno getS electedIn dex() y getSelectedItem (); el pr imer o retorna la posición del objeto selecciona do segundo retorna un objecto. y el
JTable - JScrollPane para Este componente per mite crear tablas de filas y columnas sencill os f or mular ios o list ados hasta comp le jas hojas de cálculo tipo Excel.
desde
Este componente, aunque se puede, No se debe colocar dir ectamente en el área de trabajo, pr imer o debe colocar se un JScrollPane, el cual per mite la utilización de barras de desplaza miento hor izontal y ver tical en caso de que la cantida d de celdas sobrepase el tamaño de la vista.
Pr imer o selecciona mos el JS cr ollPane y lo ubicam os en la pa ntalla; este a par e ce inicialmente como un pequeño punto, pero con un clic sobre este punto y arr astr and o el Mou se en diagonal hacia arr i ba y la izquier da, podemos acomodar el tamaño de la vista que per mitir á este scr oll.
Lu ego selecciona mos el JTable de la Paleta que ya hemos acomodado anter ior mente.
y hacemos clic sobre el JScr oll Pane
Apar e ce un JTable con una ca ntidad de filas y columna s pr edeter mina das, pero est as se pueden camb iar haciendo uso de la opción model que se encuentra en la zona de pr opieda des de este objeto. Esta opción abre un cuadro de diálogo que per mit e agregar o quit ar filas y columnas, escoger el tipo de dato que debe ir en cada c elda (Str ing, int, double, et c…) y per mitir cuales celdas serán edita bles o no.
JSpinner el incr e mento o C omponente que f acilita decremento de alg una var iable, que por def ect o es nu mér ica, aunque ta mbién se puede usar pa r a mostrar un rango de var iables de texto, o hasta crear un objetom más comple jo como un selecciona dor de f echas .
un En este e jemp lo, el pr im er JSpinn er es usado en conjunto con el cual soporta una secuencia de números Sp inner Numb er Model, doublés o int. Adem ás puede especif icar los valor es máximos y mín imos per mit idos, el valor inicial y la cantidad de cada incr emento o decremento. Para definir esto, accedemos a la opción model de la zona de pr opiedades de este JSp inner , y en el cuadro de diálogo que aparece, seleccionamos la opción User Code y colocamos el siguiente có digo: new javax. sw ing.Sp inner Number Model ( inicial, min, max, incr emento )
Y lógicam ente,
r eemp la zamos
la s
var iables
por
el
va lor que
deseamos. El segundo JSp inner es usado con un Sp inn er ListModel
el cual muestra los va lor es def inidos en un arr eglo de objetos o en una list a.
El tercer JSpinner es usado con Sp inner Dat eModel y un DateEditor , con lo cua l el JSp inner soporta una secuencia de f echa s. Desde netbeans, estas pr opiedades y f uncionali dades adiciona les no se pueden agr egar dir ectam ente por medio de la inter f az gr áf ica. Este t ipo de per sonalización que soportan los spinner es solo posible editando el código y agregando estos modelos. Este tutor ial está encaminado por ahora solo a la cr eación de inter f aces gr áf icas desde netbeans, así que el código f uente de per sonalización de este
tipo
de objetos se desarr ollar á en otro avanzada de inter f aces sw in g.
tutor ial dedicado a la pr ogr a mación
Más inf o: htt p:// java.sun.com/docs/ books/tut or ial/uisw ing/ components/spinner .html
Los componentes hasta ahora nombrados se han especif ica dos un poco en utilización de estos, per mite obtener una detalle debido a que una buena inter f az más agr adable; la extensa lista de los demás componente de java swi ng no han sido detalla dos debido a su fácil utilización, ya que el usuar io puede ir probando, colocan do objetos y per sonalizando su inter f az a su medid a.
A pesar de que Net beans es un entorno de desarr oll o muy complet o y podemos edit ar tanto código como GUI queramos, es muy r ecome ndable usar esta herr amient a solo como edit or gr áf ico, ya que la edición de código desde este ide no tiene un buen nivel de usa bilida d que per mita un buen contr ol de código, corr eción de errores y demás tareas de manera facil y agr a da ble.
Uso de JDB C - Clase Driver Manager •
JDBC, es mas que un acrónimo de Java DataBase Connectivity, es un API de Java que permite al programador ejecutar instrucciones en lenguaje estándar 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 sólo se tengan que comunicar con el interfaz JDBC. Éste es el encargada de comunicarse con los sistemas de base de datos.
Ilustración 1, Esquema JDBC Esto hace que la programación 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 comunicación fundamental entre las aplicaciones y JDBC se realiza a través 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.
Ilustración 2, Funcionamiento del controlador JDBC de tipo 1 Tipo 2. Son controladores parcialmente escritos en Java y parcialmente escritos en el código nativo que comunica con el API de la base de datos. En estos controladores hay que instalar tanto paquetes Java como paquetes de código nativo, lo que no les hace válidos para Internet.
Ilustración 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 genérico de base de datos que utiliza un protocolo determinado. No requiere tener instalado ningún software de librería de la base de datos. Lo malo es que el servidor intermedio (middleware) suele requerir instrucciones específicas de la base de datos.
Ilustración 4, Funcionamiento del controlador JDBC de tipo 3
Tipo 4. Paquetes de Java puro que traducen peticiones JDBC a protocolo de base
de datos específico. No requieren intermediarios entre el software JDBC y la base de datos
Ilustración 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 página web y después descargarlo. Las instrucciones de instalación 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 dirección: http://servlet.java.sun.com/products/jdbc/drivers/index.html
conexión Para conseguir conectar una base de datos con una aplicación, nuestra aplicación requiere el URL de la base de datos y las propiedades que establezca nuestro controlador JDBC. Las clases necesarias para usar JDBC están en el paquete java.sql. El primer paso es instalar el controlador (driver ) de la base de datos.
Tipo Implementación
Conexión a base de datos
Clase JDBC java.sql.Driver java.sql.DriverManager java.sql.DriverPropertyInfo 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 método que más se usa es lanzar el controlador en la propia aplicación mediante el método estático 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 instrucción 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:s g b d : / / s e r v i d o r / b a s e d a t o s : p u e r t o ? u s e r = x x x & p a s s w o r d = y y y
Por ejemplo en MySQL
jdbc:mysql://localh ost/NombreBD:3306 ?user=usuario&pas sword=clave
Por ejemplo en SQL Server 2005
jdbc:sglserver://loc jdbc:sgls erver://localhost:143 alhost:1433;databas 3;databasename=No ename=No mbreBD
La conexión se realiza mediante un objeto de la clase java.sql.Connection . La construcción típica implica indicar la URL de la base de datos, el usuario y la contraseña. Ejemplo (MySQL):
Connection
cn=DriverManager .getConnection( "jdbc:mysql://localhost/almacen:3306","root","compa");
El método estático getConnection de la clase DriverManager es el encargado de realizar la conexión. 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á ejecutándose, el usuario no es el correcto, etc. La conexión se cierra con el método close de la clase Connection .
DSN ( Data Source Name) un DSN son las siglas de Data Source Name y son básicamente unos nombres o referencias a bases de datos que utilizan los sistemas Windows para trabajar con esas bases de datos por conexión 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 conexión, 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 (artículos de una tienda virtual, proveedores o clientes de una empresa, películas en cartelera en el cine...). Estos registros son catalogados en función de distintos parámetros que los caracterizan y que presentan una utilidad a la hora de clasificarlos. Así, por ejemplo, los artículos de una tienda virtual podrían catalogarse a partir de distintos campos como puede ser un número de referencia, nombre del artículo, descripción, precio, proveedor... Las bases de datos son construidas sirviéndose de aplicaciones tales como el Microsoft Access o el MySQL las cuales resultan bastante sencillas de util izar con unos conceptos mínimos. Nuestro objeto aquí no es explicar la forma de explotarlas sino cómo establecer una conexión entre la base de datos, almacenada en cualquier lugar del disco duro y nuestra página web alojada también en cualquier parte y reconocida por nuestro servidor personal a partir del directorio vir tual. Para crear este vínculo, 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 conexión es ir al panel de configuración y abrir el icono ODBC 32bits. Dentro de él, deberemos crear un DSN (Data Source Name) de tipo sistema o usuario. Para ell o nos colocamos en la solapa correspondiente (DSN sistema o DSN usuario) y seleccionamos "Añadir". A continuación se nos pedirá seleccionar los controladores de la aplicación 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 aplicación 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 tendrán por qué encontrarse en el servidor donde trabajemos.
Interfaz
Statement
la interfaz Statement permite ejecutar las instrucciones SQL y devolver el resultado generado: El Connection, permite obtener una variable de la interfaz método createStatement de la clase Connection, 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() .next(). ResultSet es de sólo lectura: ResultSet nombres = select.executeQuery select.executeQuery ("SELECT * FROM Tabla "); Las consultas Statement tienen tienen métodos diferentes según el tipo de instrucción SQL empleada: (String sql): devuelve un objeto ResultSet , que executeQuery (String 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 utilización de un Driver de BD, iniciar una conexión y ejecutar las sentencias de SQL para acceder a las tablas de una BD se realizan cuando la aplicación esta en ejecución ; esto puede generar 2 tipos de Excepciones :ClassNotFoundException : ClassNotFoundException y SQLException ( Errores en tiempo de Ejecución) por lo cual Java obliga a utilizar la Instrucción que maneja las Excepciones En Java:
try { //Operaciones que pueden dar a lugar a una Excepción o error en tiempo de ejecución cuando se realiza E/S
} catch( Manejador Nombre) { // Acciones a ejecutar cuando se produzca la Excepción, para manejarla de la mejor manera posible. Puede haber mas de una clausula catch si son mas de una las excepciones } EJEMPLO COMPLETO (conexión 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 método Statement que permite ejecutar instrucciones SQL de tipo UPDATE, INSERT o DELETE y también CREATE TABLE , DROP TABLE y otros de definición de tablas. Devuelve un entero que indica el número 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 método permite ejecutar una consulta SELECT. Este tipo de consultas devuelven una tabla, que en Java se representa con objetos de clase ResultSet. El método next de esta clase permite avanzar de fila, mientras que hay varios métodos get que permiten obtener el valor de una columna. En el caso típico, 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 método 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 método g e t para obtener valores. Los métodos 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 según esté puesto en la base de datos) o el número de campo según 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 Java equivalente
tipo SQL
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 función get puede ocurrir que el valor leído sea nulo. En ese caso se puede comprobar mediante la función booleana wasNull. Esa función devuelve true si la última función 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 métodos interesantes: getSQLState. Describe el error según las convenciones XOPEN. getMessage. El método típico de excepciones, salvo que éste recoge el texto que envía el controlador JDBC según lo informado por el gestor de bases de datos, lo que le hace muy efectivo. getErrorCode. Devuelve el código de error ocurrido (según lo informado por el gestor de la base de datos) getNextException. Que permite ver la siguiente excepción 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("Código:
"+e.getErrorCode());
System.err.println("Mensaje:
"+e.getMessage());
e.getNextException();
} }
resultados con posibilidades actualización. JDBC 2.0
de
desplazamiento
y
Se ha visto anteriormente como el objeto de clase ResultSet es el encargado de almacenar los resultados de una consulta SELECT creada con el método executeQuery de la clase Statement. Este objeto se puede recorrer del primer registro al último mediante el método next y se puede obtener el valor de cada
campo mediante métodos get (getInt, getString, getBy te, getBigDecimal,... ).
En JDBC 2.0 se puede además realizar recorridos en todas las direcciones sobre los registros e incluso añadir registros. Para ello el controlador debe ser compatible con JDBC 2.0, de otro modo no se podrán utilizar estas funciones.
el método 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 método createStatement . Sin embargo este método puede utilizar dos argumentos que permiten indicar el tipo de ResultSet que obtendría 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. Sólo se podrá utilizar el método 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 .
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 métodos para desplazarse por los registros: método
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 número de fila se indica con un número negativo, la fila se cuenta desde el final.
método
uso
boolean relative(int fila)
Coloca el puntero de registros en la fila indicada a partir de la posición actual del puntero. Si esa fila no existe, devuelve false. El número 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 método next se movería al primer registro si se utiliza tras esta orden.
void afterLast()
Coloca el puntero detrás del último registro. El método previous se movería 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 situado delante del primer registro.
está
boolean isAfterLast()
Devuelve true si el puntero situado detrás del último registro.
está
int getRow()
Obtiene el número de registro actual
Modificación de datos Los conjuntos de resultados se pueden utilizar también para modificar los datos obtenidos por la consulta SELECT (siempre y cuando sea posible). Para ello se necesitan utilizar los métodos update de la clase ResultSet que permiten modificar el contenido de un campo en la posición actual del puntero de registros. Se trata de un conjunto de métodos que comienzan con la palabra update seguida del tipo de datos Java del campo y un segundo parámetro que indica el nuevo valor para el campo. Ejemplo:
rs.first(); //Si rs es un ResultSet, se coloca el puntero //el primer r egistro rs.updateDouble(“Precio”,2.34);
en
//El precio valdrá 2,34 en //el primer registro
rs.updateString("tipo","tr");//El
campo
tipo
valdrá
tr
rs.updateRow();
El método 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 método cancelRowUpdates
Adición de datos Para añadir un nuevo registro (una nueva fila) en el conjunto de resultados obtenido. Hay que emplear los métodos anteriores de modificación de datos (métodos update) sobre una fila especial conocida como fila de inserción de registros. Para ello los pasos son:
1> Colocar el cursor en la fila de inserción de registros mediante el método moveToInsertRow. 2> Actualizar los datos de los campos de ese nuevo registros usando los métodos update (updateString, updateInt, updateBigDecimal,...). 3>
Añadir el registro en la base de datos con insertRow (se puede cancelar
con
cancelRowUpdates)
4> Colocar el
cursor en
la
posición
anterior
utilizando
el
método
moveToCurrentRow.
Borrar registros Se puede borrar el registro actual del conjunto de resultados utilizando el método deleteRow .
Actualizar registro El método refreshRow del ResultSet actualiza el valor del registro actual, según 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.
INTRODUCCIÓN A LAS APLICACIONES DESKTOP CON NET BE ANS Ob jetivos:
Que el Alumno: 1) Haga una aplicación de Mantenimiento Básica utilizando el asistente de NetBeans 6.1. 2) Utilice controles definiendo propiedades, métodos 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-conn ector - java-5.1.5-bin .jar este en la ruta que se muestra a continuación:
C:\Ar ch ivos de programa\Apache Sof twar e Foundation\Apache Tomcat 6.0.16\lib
Si no existe el Archivo, solicítelo a su instructor y cópielo en la ruta descrita anteriormente
2)
Levante los Servicios de WampServer
3)
Seleccione el Driver para Mysql
4)
Cree la Conexión 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 NÚMERO DE CARNET, no la palabra ca r net
Con lo anterior aparecerá la siguiente Pantalla, la cual indicara si la conexión a la Base de Datos se ha realizado y entonces presione el Botón OK.
5)
Haga la conexión a su Base de Datos (clic derecho del ratón) que contiene como nombre su número de carnet.
Presione el botón OK y aparecerá lo siguiente:
6)
Haga una Java Aplicación Desktop, Seleccionando la Categoría Java y seleccionando el tipo de proyecto como se muestra en la figura
7)
Como nombre del Proyecto escriba Alumnos, seleccione como ubicación del proyecto la carpeta que contiene su número de carnet, seleccione la Database Application y después presione el botón Next >.
Aparecerá la siguiente pantalla, que muestra la conexión 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 continuación, seleccionando la tabla alumno que fue creada en la guía anterior.
9)
Seleccione el radio botón Textfields y presione el botón Finis h
10) Reconozca el entorno de Desarrollo para Aplicaciones Desktop.
11) Configuración de Botones, se les hará el siguiente cambio a los botones; ubíquese en cada botón y cámbieles el nombre oprimiendo el botón derecho del ratón seleccione el menú emergente properties, ubíquese en la propiedad text y cambie el nombre a cada botón 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 NetBea ns, se procederá a realizar el siguiente cambio a su formulario, tome el objeto Combo Box y colóquelo 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) Ubíquese en el objeto Combo Box y presione el botón derecho del Mouse, seleccione la opción properties del menú emergente y realice los siguientes cambios:
En la propiedad name colóquele como nombre sexoField En la propiedad model escriba M, F En la propiedad enabled desactivar esta opción
15) Ubíquese en la pestaña Binding y realice los cambios para las propiedades selectedItem y ena bled, tal como se muestra en la figura
16) Proceda a configurar el objeto Combo Box sexoField en la pestaña Code, modifique la propiedad Variable Na me.
17) Ahora proceda a ejecutar el proyecto tal como se describe a continuación; ubíquese 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 Aplicación Desktop aparecerá algo similar a la siguiente figura, efectué algunas pruebas, como ingresar nuevos datos, modificando datos existentes y borrar registros.
E jer cicio 2 Creación de Mantenimiento en forma manual (código puro, sin asisten tes). Este Mantenimiento hace la creación de una tabla adicional a su esquema de Base de Datos, Esta Tabla es DatosPersonales.
DATOSPERSONALES Nombre Apellidos Fechanac Telefono Salario
Char(20) Char(25) Date Char(10) Float
1) Cree un nuevo proyecto Java Application (No Web), nómbrelo pruebajdbcmanual, ubíquelo en la carpeta que tiene como nombre su número de carnet; en el Create Main Class (Clase Principal) digite PruebaManual, tal como se muestra en la figura
Presione el botón Finish.
2) Agregue el JAR de MySQL al proyecto; ubíquese en el objeto Libraries presione el botón derecho del Mouse y seleccione el ítem del menú emergente Add JAR/Folder… como se muestra a continuación
Busque la carpeta
C:\Ar chivos de programa\Apache Sof twar e Foundation\Apache Tomcat 6.0.16\lib
Seleccione el driver de conexión para MySQL
mys ql-co nn ector - ja va-5.1.5- bin .jar
Como se muestra en la siguiente figura
Después de agregar el driver para MySQL, el proyecto quedará como muestra la siguiente figura
3) Este código de preferencia, cópielo y péguelo integro a su clase principal de la aplicación
package pruebajdbcmanual ; import java .u til.*; import ja va .text.*; import ja va .a wt.*; import java.sql.*; import java .awt.event.*;
Ajuste la cadena de conexión a su BD
class PruebaManual extends Frame implements ActionListener { Button crear, ver, insertar, ce rr a r ; TextField infor m acion; Panel pr incipa l; Connection conexion; String Str i ngConect=" jdbc:mysql ://loca lhos t:3306/c a r net?u ser =r oot"; { sup er ("Da tos P er sona les"); setSize(220,120) ; PruebaManual( ) Button("C r ea r "); pr i ncipa l=new Pan el(); crear=new cr ea r .add Ac tion Listener (this); ver =n ew Button("Mostr ar "); ver .add ActionListener (this) ; insertar=new Button("Inser tar "); cerrar=new inser ta r .add ActionListener (this); Button("C err a r "); TextField(20); cerr a r .add Ac tionListener (this); infor ma cion=new pr i ncipa l.add (infor ma cion); pr i ncipa l.add (cr ear ); pr i ncipa l.add (inse r tar ); pr i ncipa l.add (ve r ); pr incipa l.add (cerr a r ); addWindowListener(new Cerr a r ());
pr i ncipa l.se tBackgr ound (SystemColo r .contr ol); add (pr incipa l); setVisible(tr ue); try {
Class.fo r Na me("com.mysq l. jdbc.Dr ive r ").n ewInstan ce(); } // tr y catch(Exception e) {
infor ma cion.setText("No se pudo cargar el Driver JDBC "); } // ca tch }// Constructor da tosp er sona les
private void Crear_tabla() Statement sentencia ;
{
{ con exion =Dr iver M ana ger .getConn ectio n(S tr in gCon ect); se ntenci a =con exion.cr ea teSta tement();
try
try {
senten cia .executeUpda te("DR O P TABLE IF EXISTS DA TOSPER SONA LES"); // in ter no try } catch(SQLException e) { informacion.setText("Error al Borrar la tab la "); System.out.p r intln(e); } // catch i nter n o se ntenci a .executeUpda te("CRE ATE TABLE DATOSPERSONALES ("+ "NOM BRE C H AR(20),"+ " APELLIDOS VA RC H AR(25),"+ "FEC H A_NA C DATE Not N ull,"+ //Not Null significa que los datos son o bligator ios "TELEFONO CH A R(10),"+ "SAL ARIO FLOAT )") ; // Crea la Llave Primaria de la Tab la sentenci a .executeUpda te(" ALTER TABLE DATOSPERSONALES " + " ADD CONSTRAINT PK_DATOSPERSON " +
"PRIM AR Y KEY USING BTREE (No mbr e, Apellidos)" ) ; infor ma cion.setText("Tab la Cr eada "); conexion.close() ; try // exter no } catch(SQLException e) { } } // Cr ea r _ tab l a
public void actionPerformed(ActionEvent e) { String com=e.getActionCommand() ;
if ("Crear".equals(com)) { infor ma cion.setText("")
;
Crear_tabla() ; } // if Cr ea r else
if ("Insertar".equals(com)) { new Insertar(this) ; } // if In ser ta r else if ("Mos tr a r ".equa ls(com)) new Ver (this); } // if Ve r else {
{
dispose(); System.exit(0); } } // a ction P er fo r med
class Cerrar extends WindowAdapter { public void windowClosing(WindowEvent e) dispose(); System.exit(0);
{
} // wind ow Closing } // Cerr a r
public static void main(String a r gs[]) { new Pr ueba M anual(); } // ma in } // da tosp er sona les
class Insertar extends Dialog implements ActionListener { private Connection con exion ; private Button i ncluir ,ter mina r ; private TextField nombr e,ap elli dos,fec h _ na c, telefono, salario ; Insertar(Frame f) {
super(f,"Insertar Da tos",tr ue); setSize(320,210); nomb r e=new ap ellidos= new TextField(20); fech _ na c=new TextField(25); TextField(10); telefon o= n ew sala r io=new TextField(10); inclu ir =new TextField(12); " I r Bu tton(" nclui ); inclu ir .add ActionListener (this); Button("Ter mina r "); terminar=new ter mina r .add Action Listen er (th is); Panel P_Datos=new Pan el(); P_Datos.add(new Lab el("Nombr e : ")); P _Da tos.add (nombr e); Lab el(" Apelli dos: ")); P_Datos.add(new P _Da tos.add (ap elli dos) ; P_Datos.add(new Lab el("Fecha Nacimiento: ")); // Formato yyyy-mm -dd P _Da tos.add (fech _ na c); P_Datos.add(new Lab el("Telefo n o : ")); P _Da tos.add (telefo no) ;
")); P_Datos.add(new Label(" ")); P_Datos.add(new Label("Salario : P _Da tos.add (sala r io); P_Datos.add(new Label(" P _D a tos.add (inclui r ); P _Da tos.add (ter mi na r ); nombr e.setEdi tab le(tr ue); ap ellidos.setEditab le(tr ue); fech_nac.setEditable(true); telefo n o.setEdi table( tr ue);
"));
sala r io.setEditab le(tr ue); add (P _D a tos) ; setVisible( tr ue); } { private void insertar_fila() Statement sentencia ; String Str ingConect=" jdb c:mysq l://localhost:3306/c a r net?u ser =r oot"; tr y{ conexion=Dr iver M ana ger .ge tConnectio n(Str ingConect); sen tencia =conexion.cr ea teStatement(); String sql_ add ="INS ERT INTO DATOSPERSONALES VALUES ( ' " + + "', + nombr e.getText().toUpp er Case() '" ap elli dos.getText().toUpp er Ca se() + "', '"+
fech_nac.getText()+ "', '" + telefono.getText() + "', " + salar io.getText()+ ") " ; sentenci a.executeUpda te(sql_ add ); } // tr y catch(SQLException e) { } } // insertar_fila
public void actionPerformed(ActionEvent e) String com=e.get ActionComm and ();
{
if ("Inclu ir ".equa ls(com)) { inser ta r _fil a(); nombr e.setText(""); ap ellidos.setText(""); fech _ na c.setText(""); telefono.setText(""); sala r io.setText(""); } else { if(conexion!=null) try {
{
conexion.close(); } catch(SQLException ex) { } } // if d ispose(); } // else } // a ction Per fo r med } // Inser ta r
class Ver extends Dialog implements ActionListener { private Connection con exion ; private ResultSet r esultad o; private Button siguiente,terminar, anterior, primero, ulti mo; private TextField nombre, apellidos, fech_nac, telefono, salario ;
{ Ver(Frame f) super(f,"Mostrar Datos",tr ue); setSize(330,210);
nombre=new TextFiel d(20); apellidos=new TextF ield(25); fech_nac=new TextF ield(10); telefono=new TextF ield(10); TextF iel d(12); sala r io=n ew
anterior=new Button(" Anter ior "); an ter ior .add Actio nListener (this); Button("Sigu iente"); siguiente=new siguiente.add ActionLis tener (this) ; Button("Pr imer o"); primero=new pr i mer o.add Actio nListener (this); Button("Ultimo"); ultimo=new ul timo.add Ac tionListener (this); Bu tton("F ina liza r "); terminar=new ter mina r . add Action Listen er (th is); Panel P_Datos=new Pan el();
P_Datos.add(new Lab el("Nom br e P _D a tos.add (nombr e);
:"));
P_Datos.add(new Lab el(" Ap ellid os: ")); P _D a tos.add (ap elli dos); Lab el("Fecha P_Datos.add(new Nacimiento:”)); P _D a tos.add (fech _ na c); ")); P_Datos.add(new Label(" P_Datos.add(new Lab el("Telefo n o : ")); P _D atos.add (telefo no) ;
")); P_Datos.add(new Label(" ")); P_Datos.add(new Label("Salario : P _D atos.add (sala r io); ")); P_Datos.add(new Label(" P _D atos.add (an ter ior ); P _D a tos.add (siguiente); P _D a tos.add (p r imer o); P _D atos.add (ulti mo); P _D a tos.add (ter mi na r ); add (P _Da tos); nomb r e.setEditab le(f alse); ap ellidos.setEditab le(f alse); fech _ na c.setEditab le(f alse); telefono.setEd itab le(f a lse); sa la r io.setEditab le(f alse); mostr a r ();
setVisible(tr ue); } // Constructor Ve r
public void actionPerformed(ActionEvent e) { String com=e.get ActionComm and (); if ("Sig uien te".equa ls(com)) sig uiente(); else if (" An ter ior ".equa ls(com)) an ter io r (); else if ("Pr imer o".e qua ls(com)) P r imer o() ; else if
("Ultimo".e qua ls(com))
Ultimo() ; else if (conexion!=null)
{ {
try {
conexion.close(); } // tr y catch(SQLException ex) { } // if co nexion } dispose(); } // else } // a ction Per fo r med
private void mostrar() Statement se ntenci a;
{
String Str ingConect=" jdb c:mysql://loc alhost:3306/ca r net?u ser =r oot"; try {
conexion =Dr ive r M ana ger .ge tConnectio n(Str ingConect); se ntenci a =con exion.cr ea teSta tement(); String sql_str = "SELECT * FROM DATOSPERSONALES ";
r es ultad o=sentenci a.executeQuer y(sql_str ); siguiente(); } // tr y catch(SQLException e) { } } // mostr a r
_Da tos() { private void ver Locale locales = new
Locale("en","US") NumberFormat currencyFormatter =
;
Numb er For ma t.getCu rr encyInstan ce(loca les) ; try {
String str_nomb = r es ul tad o.getStr ing("NOM BRE ") ; _ nomb.toUpp er C ase()); nombr e.setText(str String str_apell = r esu ltad o.getStr ing(" APELLIDOS") ; _ ap ell.toUpp er Ca se()); ap ellidos.setText(str sfecha = e s u r ltad o.getStr i ng("FEC H A_NA C ") ; String fech _ na c.setText(sfecha .sub str ing(8,10) + "/" + sfecha .sub str ing(5,7) + "/" + sfecha .sub str ing(0,4)) ; String telefon o.setText(r esu ltad o.getStr in g("TELEFON O")); svalor = r esultad o.getStr in g("SAL ARIO") ; float nvalor = F loa t.pa r seFloat(svalo r ); String moneda = curr encyF or ma tter .for mat(nvalo r ); s ala r io.setText(moneda ); } catch (SQLException e) { } } // ve r _D atos
{ private void siguiente() try { if ( r esultad o.n ext()) ver _Datos(); resultado.refreshRow() ;
} catch(SQLException e) { } catch(Exception ex) { } } // sigu ie nte
{ private void anterior() try { if ( r esultad o.p r evious()) ver _Datos(); resultado.refreshRow() ; } // tr y catch(SQLException e) { } catch(Exception ex) { } } // an ter io r
{ private void Primero() try { if ( r esultad o.fi r st()) ver _Datos(); } catch(SQLException e) { } catch(Exception ex) { } } // Pr imer o
private void Ultimo() try {
{
if (r esultad o.last()) ver _Da tos( ); } catch(SQLException e) { } catch(Exception ex) { } } // Ul timo
} // class Ver
4) Compile su programa y Ejecútelo
5) Presione Clic en el botón Crear, por lo que aparecerá el mensaje “Tabla Creada” Presione Clic en el botón Insertar para Agregar Registros a la Tabla
Para Guardar el Registro presione el botón “Incluir ”, recuerde que el campo fecha de nacimiento el formato de MySQL es YYYY-MM-DD 6) Agregue por lo menos cinco Registros Registros adicionales.
Al Finalizar de digitar los datos (registros) presione el botón Terminar
7) Presione Clic en el botón botón Mostrar para Navegar por los registros que contiene la tabla tabla
8) Si desea verificar si los registros re gistros fueron i ntroducidos a la base de datos, ubíquese en la pestaña pest aña Ser vices, vices, localice la conexión 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 ,IReport (Inform (Inform es de BD en Java)
JasperReports JasperReports es una herramienta de creación 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 dinámico. Su propósito principal es ayudar a crear documentos de tipo páginas, preparados para imprimir en una forma simple y flexible. JasperReports se usa comúnmente con iReport, un front-end gráfico gráfico de código abierto para la edición de informes. 2. Herramientas para el Desarrollo Netbeans 6.x (Puede 6.x (Puede utilizar esta versión e inclusive la versión mas actual (Al momento de crear este manual es la 6.8)). Adobe Reader: Este Reader: Este será utilizado para ver nuestros reportes que estarán en formato PDF. Aunque en esta ocasión no es indispensable ya que los visualizaremos a través del Jasper Viewer. MySQL 5.0: Sera 5.0: Sera el encargado de alojar a nuestra base de Datos. Ireport y JasperReports 2.0.4 (o 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 librerías que nos ayudaran a compilar y ejecutar el reporte que son las siguientes: 3. Librerías a Utilizar ( Bibiotecas ) •commons-beanutils-1.7 •commons-beanutils-1.7 •commons-collections-2.1 •commons-collections-2.1 •commons-digester-1.7 •commons-digester-1.7 •commons-javaflow-20060411 •commons-javaflow-20060411 •commons-logging-1.0.2 •commons-logging-1.0.2 •jasperreports-2.0.4 •jasperreports-2.0.4 •itext-1.3.1 (Importante tener esta librería ya que es la encargada de generar
nuestro reporte en PDF y otros formatos)
(mysql-connector-java-5.0.7-bin): para JAVA nuestro puente JDBC que nos permitirá la conexión entre el servidor de base de datos y las JSP (viene incluido en Netbeans). •Y para esta versión por supuesto Necesitamos el PLUGIN para Netbeans, este solo funciona para versiones superiores de la 6.0 •MySQL Connector
este
es
4. ¿Dónde conseguir el Software? Software? Todo el Software utilizado es Open Source y puede descargarlo desde: http://www.netbeans.org IReport
http://dev.mysql.com/downloads/ http://ireport.sourceforge.net
PLUGINS encon trara trara el d e Netbeans Netbeans 6.0 o superior y en la secc ion d e PLUGINS
MySQL 5.0, Conector para Java y Herramientas Graficas. 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 parámetro, si recuerda en el tutorial pasado lo generábamos a partir de una vista y no recibía parámetros, para este sencillo caso recibirá como parámetro 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 sección para verificar el otro reporte. Instalación del PLUGIN Para realizar este Ejemplo, por ahora solo utilizaremos una tabla, y nuestro reporte se generara a partir de recibir un parámetro, para este sencillo caso recibirá como parámetro la matricula de un estudiante, y utilizaremos única y exclusivamente el IReport que instalaremos dentro de Netbeans Paso 1
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 pestaña Downloaded y seguidamente en el botón Add Plugins
Paso 3 Ahora localice la ubicación del archivo con extensión NBM y después haga clic en el botón abrir A continuación nuestro complemento estará listo para instalarse, notara que aparece la descripción en la parte derecha, ahora pulse el botón Install
Una vez que empiece la instalación aparecerá un Wizard que le guiara, solo haga clic en siguiente y acepte los términos de la licencia. Existe la posibilidad de que Netbeans no lo pueda validar, para que la instalación continúe solo haga clic en continue.
Paso 5 Listo, nuestro IReport se encuentra Instalado, para complemento el categoría Tools
finalizar haga clic en la pestaña Installed y busque el nuevo
Listo Como podrá darse cuenta su Netbeans a cambiado un poco de apariencia, ya que se agregaron varios componentes como por ejemplo los orígenes de datos (data sources) de IREPORT, además de las consolas de salida.
Creación 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 código 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 continuación se indica: 1. Diríjase al menú archivo -> New Project 2. Después elija Java -> Desktop Application 3. En este paso elija un nombre y una ubicación, en caso de utilizar Netbeans versión 7, puede indicarle que será una aplicación con BD, de lo contrario elija la opción básica, en Netbeans 6 basta con esos Parámetros, finalice el asistente.
1.Una vez que elijo la aplicación de base de datos, en la Pestaña Services (Prestaciones) debe elegir “Nueva Conexión con Base de datos”(en este caso Netbeans esta en español) .Elija la opción MySQL y configúrela 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 botón Aceptar. Con lo cual se tratara de realizar la conexión con la BD con los parámetros 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 conexión establecida. (activa).
Antes de hacer nuestro reporte crearemos un origen de datos para establecer nue stra conexión y que nuestro reporte contenga datos reales de la BD,
Click Aqui
Seleccione
Aquí
y
después pulse Next
Ahora complete los parámetros pedidos, cuando los tenga haga clic en el botón test, si la conexión se realiza con éxito haga clic en save, de lo c ontrario corrija los que estén mal, si el mensaje de error indica acceso denegado, puede que su usuario o password sean los incorrectos, u otro problema común es que el servidor no este activado.
Después en la pantalla de datasources seleccione el origen Reportes, aunque por default se selecciona el recién creado. Ya creado nuestro proyecto, diseñaremos nuestro reporte c omo se indica:
Diseñe el reporte a su gusto, en este caso solo utilizare 4 bandas que son: title, page header, Detail, Page Footer. Las demás puede eliminarlas haciendo clic derecho sobre la misma y seleccionando Delete Band o estableciendo el valor 0 en las propiedades del lado derecho Diseñe el reporte a su gusto, en este caso solo utilizare 4 bandas que son: title, page header, Detail, Page Footer. Las demás 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 algún error elimino alguna que no debería 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 estático y después uno de texto, para realizarlo con tan solo ar rastrar y soltar siga los siguientes pasos: 1. Haga clic derecho sobre el reporte ubicado en el panel Report Inspector y s eleccione Edit Query.
2.Ahora escriba la consulta: SELECT * FROM Datos;
Despliegue el nodo Fields del Reporte:
Ahora seleccione uno por uno y arrástrelo 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 diseño agregue a las bandas restantes lo siguiente:
"Page " + $V{PAGE_NUMBER} + " of " "" + $V{PAGE_NUMBER}
Al momento de realizar la consulta cometimos una equivocación (adrede) ya que como mencionamos al principio el reporte deberá recibir un parámetro para que se realice, en este caso recibirá la matricula, así que lo que haremos primero será agregar el parámetro al reporte y después 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 póngale el nombre que desee, en este caso se llamara igual que el campo dela tabla que nos servirá en la condición, 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 modifíquela como sigue:
Listo nuestro reporte ha sido generado, recuerde que el archivo jasper y el jrxml están almacenados en la carpeta del proyecto.
Agregando Librerías Enseguida procederemos a agregar las librerías necesarias para ejecutar el reporte y poder guardarlo en distintos formatos, desplegué el proyecto y sobre la carpeta librerías haga clic derecho y después selecc ione agregar JAR busque las librerías y selecciónelas. Después crearemos una clase de java que será la encargada de crear y lanzar el reporte, en la siguientes pantalla se muestra todo el código 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 c onstructor ademas se establece la conexión*/ public class IniciarReporte { Connection conn=null; public IniciarReporte() { try { Class.forName("com.mysql.jdbc.Driver"); //se carga el dr iver Conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/reporte","root",""); JOptionPane.showMessageDialog(null,"Conexión 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 parámetros introducidos por el usuario*/ //este es el parámetro, se pueden agregar más parámetros //basta con poner mas parametro.put Map parametro = new HashMap(); parametro.put("Matricula",matricula); //Reporte diseñado y compilado con iReport JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport,parametro,conn); //Se lanza el Viewer de Jasper, no termina aplicación 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 conexión*/ 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 función será recoger la matricula, que es el parámetro que recibirá para realizare la consulta y ejecutar el reporte:
Después solo añada un evento al botón , para ello seleccione el botón y haga doble clic o inclúyalo desde la paleta de propiedades en la ficha eventos. Ahora abra el código fuente del frame y ajústelo como a continuación se muestra:
Ejecutando el Reporte Pues bien hemos terminado, ahora solo ejecute la aplicación y escríbale algún parámetro que tenga en la BD
Revisión de Conocim ientos Laboratorio de Lenguaje de Prog-I ( Netbeans)
1 -El Objetivo de la guia es desarrollar la primera aplicación en Java que interactúe con una base de Datos de Sql Server 2005 ( Sistemacont ) . Inicialmente se debe configurar el Sql server 2005 para conectarse al servidor con autentificación SQL con el Usuario sa y sin contraseña . Luego se procede a restaurar la BD Sistemacont , utilizando el archivo backup.
Ejecutar Netbean 6.5.1 y crear un Nuevo Proyecto denominado siguiente:
Appsistema con la configuración inicial
Con lo cual se creara el paquete inicial denominado appsistema y en su interior la clase Principal que contiene el método main ( punto inicial de ejecución de toda aplicación en Java).
Adicionalmente se debe crear los siguientes Paquetes dentro de Source Packages:
forms .- Contendrá todos los Frames ( formularios) de la Aplicación. También se le denomina ui , Cliente, interfaz
modelo.- contendrá todas las clases no visuales que se obtienen de realizar la abstracción para resolver problema( Ejemplo: ConexBD, Usuario, UsuarioBD, Personal ,PersonalBD,…etc).
el
resources.- Contendrá las imágenes, videos y diversos recursos multimedia que utiliza la aplicación.
El siguiente paso es fundamental: Agregar a la sección de Libraries del Proyecto el Archivo controlador de la BD (driver) a utilizar ,en este caso es sqljdbc.jar .
La aplicación utilizara las diversas clases e interfaces que incorpora el driver o archivo controlador de la BD, así como sus métodos 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
conexión inicial con una Base de Datos especifica. Verificar modelo. ( package modelo;)
que el paquete que utiliza ConexBD se llame
-Crear los siguientes Formularios JFrame Form en el paquete forms:
FrmAcceso
txtusu
Frmmenu
txtclave
2-Crear la clase Usuario dentro del paquete modelo, la cual contendrá los atributos que contiene cualquier usuario de la aplicación : 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 Métodos get y set)
package modelo;
public class Usuario
protected protected protected public usuario=""; clave=""; nivel="";
{ usuario; clave; nivel; Usuario(){
String String String
}
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 this.clave = clave; }
clave) {
public String getNivel() { return nivel; }
public void setNivel(String this.nivel = nivel; }
nivel) {
}
3-Crear la clase UsuarioBD dentro del paquete modelo , que hereda de la clase ConexBD sus atributos y métodos. Posteriormente Ud. creara las clases PersonalBD, VentasBD y ProductosBD que también tienen como clase padre a ConexBD. El contenido de la clase UsuarioBD sera:
package modelo;
java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import
public class UsuarioBD extends ConexBD { private Usuario usuario; private String tabla;
public UsuarioBD(String super(bd); tabla="Usuarios";
bd){
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 return true;
* FROM "+tabla);
}
catch(SQLException e1){ System.out.println("ERROR return false; } } }
SQL:"+ e1.getMessage());
4-Agregar los Métodos de Acceso getXX y setXX a los 2 atributos de esta clase ( usuario y tabla), en total son 4 métodos a generar:
-getUsuario, setUsuario, getTabla y setTabla.
Para lo cual señalar un atributo de la clase UsuarioBD pulsar el botón derecho del mouse y señalar
-Refactor
-Encapsulate Fields ( Encapsular los campos o atributos, es decir generar los métodos get y set)
-Señalar las casillas de los 4 métodos y pulsar el botón refactor( refactorizar).
5-Modificar la cabecera de la clase FrmAcceso agregando el objeto u1 que se instancia de la clase UsuarioBD y también modificar el constructor para hacer la conexión 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 código al botón 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 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()); } }
Frmmenu (JFrame Form)
-Crear el Formulario FrmUsuario de la clase JDialog Form en el paquete forms.
FrmUsuario
tblusuarios ( JTable )
(JDialog Form ) formulario modal
txtusu
txtclave
txtnivel
Modificar la cabecera de la clase FrmUsuario agregando el Atributo u1 que se instancia de la clase UsuarioBD y también modificar el constructor para hacer la conexión 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");
Agregar estas 2 lineas
}
-Para realizar el Movimiento a través de los registros de la tabla con los botones de Desplazamiento ( primero, anterior, siguiente , ultimo) , crearemos el método cargarReg el cual tiene un parámetro que de tipo enumerado que especificar cual registro deseamos visualizar en el formulario. Agregar este método después 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: break; rsusu.first(); 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 código para el botón 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");
}
-Código del botón 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 CallableStatement
Una vez que hemos establecido una conexión con una base de datos, podemos usar el método Connection.prepareCall para crear una sentencia callable. Estas sentencias nos permite ejecutar prodecimientos almacenados SQL. El siguiente ejemplo crea un o bjeto CallableStatement con tres parámetros para almacenar información 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 más parámetros. Query PreparedStatement: Creamos un objeto PreparedStatement especificando la definición de plantilla y la situación de los parámetros. Los datos de los parámetros se insertan dentro del objeto PreparedStatement llamando a sus métodos setXXX y especificando el parámetro y su dato. Las instrucciones SQL y los parámetros son enviados a la base de datos cuando se llama al método executeXXX. Este segmento de código crea un objeto PreparedStatement para seleccionar datos de usuarios basados en la dirección email del usuario. El interrogante ("?") indica que este sentencia tiene un parámetro: PreparedStatement pstmt = con.prepareStatement ( "select theuser 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 sólo se insertan los valores modificados para cada llamadas: pstmt.setString(1, anotherEmailAddress);
from
registration
where
Nota: No todos los drivers de bases de datos compilan sentencias preparadas. Update PreparedStatement: Este segmento de código crea un objeto PreparedStatement para actualizar el registro de un vendedor. La plantilla tienecinco parámetros, que se seleccionan con cinco llamadas a los métodos 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 descripción 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'" podría ser almacenado de forma más 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 actualización 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 línea de la base de la tabla de la base de datos. Algunas consultas devuelven una línea, mientras que muchas consultas devuelven múltiples líneas de datos. Se utilizan los métodos getType para recuperar datos desde columnas específicas 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 método 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 int erfaz DatabaseMetaData y Results etMetaData Metadatos Hay casos en los que se requiere conocer la estructura de una base de datos (nombre y diseño 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 método getMetaData de la clase Connection., por lo que es el objeto de la conexión el que permite obtener estos metadatos. El resultado de este método es un objeto de clase DatabaseMetaData.
//Si con es el objeto Connection: DatabaseMetaData metadatos=con.getMetaData();
métodos de la clase DatabaseMetadata Una vez obtenido el objeto se pueden utilizar estos métodos para obtener información sobre la base de datos:
método de DatabaseMetadata
uso
boolean allTablesAreSelected()
Indica si se pueden utilizar todas las tablas
boolean deletesAreDetected(int tipo)
Devuelve true si las filas borradas en un conjunto de resultados (objeto ResultSet) pueden
ser
detectados
por
el
método
rowDeleted de la clase ResultSet. El parámetro tipo indica el tipo de conjunto de resultados ResultSet getCatalogs()
Devuelve una tabla de resultados ResultSet cuyo
contenido
es
la
columna
_
String getCatalogSeparator()
Devuelve los caracteres que separan nombre del catálogo respecto del nombre de
el
ResultSet getColumns(String catálogo, 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). Además los campos pertenecen a la tabla indicada en el catálogo (un catálogo agrupa esquemas, puede ser null) y plantilla de esquema (un esquema agrupa tablas relacionadas y puede ser null ) señalados. El conjunto de resultados posee 22 columnas. Las fundamentales son: TABLE_CAT. Catálogo 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 según las directrices del gestor de base de datos empleado COLUMN_SIZE. Entero que indica el tamaño del campo
método de DatabaseMetadata
uso
IS_NULLABLE. “YES” Cadena o “NO” que indica si el campo puede contener nulos.
Connection getConnection()
Devuelve el objeto Connection relacionado con este
String getDatabaseProductName()
Devuelve el nombre comercial del sistema gestor
String getDatabaseProductVersion()
Devuelve la versión de producto del sistema de base
int getDriverMajorVersion()
Devuelve el número mayor de versión del driver
int getDriverMinorVersion()
Devuelve el número menor de versión del driver
String getIdentifierQuoteString()
Devuelve el carácter utilizado para delimitar nombres de campo o de tabla en la base de
ResultSet getImportedKeys(String catalog, String schema, String tabla)
Obtiene un conjunto de resultados que describe la clave de la tabla indicada para el
ResultSet getIndexInfo(String catalog,
Obtiene un conjunto de resultados que describe los índices de la tabla indicada.
int getMaxColumnNameLength()
Devuelve el máximo número de caracteres que puede poseer un campo en esta base de
int getMaxColumnsInGroupBy()
Obtiene el máximo número de elementos que pueden indicarse parea esta base de
int getMaxColumnsInIndex()
Devuelve el máximo número de campos que se pueden colocar en un índice para esta
int getMaxColumnsInOrderBy()
Obtiene el máximo número de elementos que pueden indicarse para esta base de
int getMaxColumnsInSelect()
Devuelve el máximo número de elementos que pueden indicarse en una instrucción SELECT para
int getMaxColumnsInTable()
Devuelve el máximo número de campos que puede
método de DatabaseMetadata
uso
int getMaxConnections()
Obtiene el número máximo de conexiones concurrentes que pueden abrirse para esta
int getMaxIndexLength()
Devuelve el máximo número de bytes que puede
int getMaxRowSize()
Devuelve el máximo número de bytes que puede
int getMaxStatements()
Obtienen el máximo número de objetos de consulta (Statements) que se pueden crear
int getMaxTableNameLength()
Obtiene el máximo número de caracteres que puede tener el nombre de una tabla en
int getMaxTablesIn Select()
Obtiene el máximo número de tablas que pueden
String getNumericFunctions()
Obtiene una lista de las funciones internas de tipo numérico de esta base de datos separadas por
ResultSet getPrimaryKeys(String
Obtiene una tabla de resultados (ResultSet) cuyos registros representan una tabla del esquema (que puede ser null)
catálogo, String esquema, String tabla)
y
catálogo
(también
puede
ser
null)
indicados. La tabla posee estas columnas: TABLE_CAT. Nombre del catálogo (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.
String getSQLKeywords()
Devuelve comandos,
String getStringFunctions()
Obtiene una lista de las funciones internas de tipo String de esta base de datos separadas por comas.
una cadena con todos separados por comas,
los SQL
String getSystemFunctions()
Obtiene una lista de las funciones internas de sistema de esta base de datos separadas
método de DatabaseMetadata
uso
ResultSet getTables(String catálogo,
Obtiene una tabla de resultados ( ResultSet )
String plantillaEsquema, String plantillaTabla, String tipos[])
en la que cada fila es una tabla del catálogo (un catálogo agrupa esquemas, puede ser null ), plantilla de esquema (un esquema agrupa tablas relacionadas y puede ser null), patrón 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”.
“GLOBAL
Tabla de sistema
TEMPORARY”.
Tabla
temporal.
“LOCAL”.
Tabla Local.
Si el tipo es null se obtendrán todas las tablas de la base de datos. El conjunto de resultados posee cinco columnas, que son: TABLE_CAT. Catálogo de la tabla. ResultSet getTablesTypes()
Obtiene un ResultSet donde cada registro es un tipo de tabla soportado por el gestor
String getURL()
Obtiene una cadena con el URL del sistema gestor
String getUserName()
Devuelve el nombre de usuario actual del gestor
boolean nullsAreSortedAtEnd()
Indica si los valores nulos aparecen los últimos
boolean nullsAreSortedAtStart()
Indica
si
los
valores
nulos
aparecen
los
método de DatabaseMetadata
uso
boolean othersDeletesAreVisibles()
Indica si los registros borrados p or otros usuarios
boolean othersInsertsAreVisibles()
Indica si los registros insertados por otros usuarios
boolean othersUpdatesAreVisibles()
Indica si los registros actualizados por otros usuarios
boolean ownDeletesAreVisibles()
Indica si nuestros registros borrados son visibles.
boolean ownInsertsAreVisibles()
Indica si nuestros registros insertados son visibles.
boolean ownUpdatesAreVisibles()
Denota
boolean storesLowerCaseIdentifiers()
Indica si los identificadores de la base de datos sin delimitador son almacenados en minúsculas.
boolean storesLowerCaseQuotedIdentifiers()
Indica si los identificadores de la base de datos con delimitador son almacenados en
boolean storesMixedCaseIdentifiers()
Denota si los identificadores de la base de datos sin delimitador son almacenados en
boolean storesMixedCaseQuotedIdentifiers()
Indica si los identificadores de la base de datos con delimitador son almacenados en
boolean storesUpperCaseIdentifiers()
Indica si los identificadores de la base de datos sin delimitador son almacenados en minúsculas.
boolean storesUpperCaseQuotedIdentifiers()
Indica si los identificadores de la base de datos con delimitador son almacenados en
boolean supportsAlterTableWithAddColumn()
Indica si columnas
la
base usando
de datos permite la instrucción
añadir SQL
boolean supportsAlterTableWithDropColumn()
Indica si columnas
la
base usando
de datos permite la instrucción
borrar SQL
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
boolean supportsCorrelatedSubqueries()
Indica
si
si
nuestros
la
registros
base
de
actualizados son
datos
soporta
boolean supportsGroupBy()
Indica si la base de datos soporta la cláusula
método de DatabaseMetadata
uso
boolean supportsLikeEscapeClause()
Indica si la base de datos soporta la cláusula
boolean suportsMixedCaseIdentifiers()
Indica si el nombre de los identificadores sin delimitador de la base de datos cuando combinan mayúsculas y minúsculas se
boolean supportsMixedCaseQuotedIdentifiers()
Indica si el nombre de los identificadores con delimitador de la base de datos cuando
boolean supportsOrderByUnrelated()
Denota si la cláusula ORDER BY puede utilizar campos diferentes de los enunciados
boolean supportsResultSetConcurrency(int
Indica si la concurrencia
base de indicada
datos para
soporta la el tipo
tipo, int concurrencia)
boolean supportsResultSetType(int tipo)
Indica si los ResultSet obtenidos desde esta base de datos pueden ser del tipo indicado, (véase el método createStatement de la clase
boolean supportsSelectForUpdate()
Indica si el SQL de la base de datos permite
boolean supports Transactions()
Indica
boolean updatesAreDetected()
Indica si se pueden detectar filas actualizadas con el método rowUpdated de la
boolean usesLocalFiles()
Indica si la base de datos almacena archivos locales
si
la
base
de
datos
soporta
En este listado sólo se han señalado las instrucciones más utilizadas, hay el doble de métodos en realidad con respecto a los aquí señalados.
Metadatos de una consulta El método getMetaData de la clase ResultSet da como resultado un objeto de tipo ResultSetMetaData que devuelve información de control del conjunto de resultados. Sus métodos más interesantes son: método de
ResultSetMetaData
int getColumnCount()
uso
Obtiene
el
número
de
columnas
del
int getColumnDisplaySize(int
Indica la anchura que se destina en pantalla a mostrar el contenido de la columna indicada
método de
ResultSetMetaData
uso
String getColumnName(int nColumna)
Devuelve el nombre de la columna con el número
int getColumnType(int nColumns)
Obtiene el tipo de datos SQL estándar de la columna
int getColumnTypeName(int nColumna)
Obtiene el tipo de datos compatible con la base de
int getPrecission(int nColumna)
Devuelve
int getScale(int nColumna)
Obtiene
el
número
boolean isCaseSensitive(int nColumna)
Indica
si
la
boolean isSearchable(int nColumna)
indica si la columna puede figurar en el apartado
boolean isSigned(int nColumna)
Indica si la columna posee números con signo
la
precisión
de
decimales
de
decimales
columna
distingue
de que
la se
entre
Manejo de Capas
JDBC especifica una serie de clases y métodos para permitir a cualquier programa Java una forma homogénea de acceso a sistemas de bases de datos. Este acceso se realiza a través 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, haría que las aplicaciones Java también perdiesen la portabilidad. Y además, ODBC tiene el inconveniente de que se ha de instalar manualmente en cada máquina; al contrario de los drivers JDBC, que al estar escritos en Jav a son automáticamente instalables, portables y seguros. JDBC permite ciertas facilidades, como realizar la actualización de múltiples registros con un solo comando o acceder a múltiples servidores de bases de datos dentro de una transacción simple. Además 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 conexión a la base de datos para cada comando JDBC.
JDBC también permite escribir aplicaciones que accedan a datos a través de sistemas de bases de datos incompatibles corriendo en plataformas distintas, basándose 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 conexión entre la aplicación Java o el applet que se ejecuta en el navegador, se conectan directamente a la base de datos.
•
Esto significa que el driver JDBC específico para conectarse con la base de datos, debe residir en el sistema local. La base de datos puede estar en cualquier otra máquina y s e accede a ella mediante la red. Esta es la configuración típica Cliente/Servidor: el programa cliente envía instrucciones SQL a la base de datos, esta las procesa y envía los resultados de vuelta a la aplicación.
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, véase la figura. En este caso el usuario no tiene contacto directo, ni siquiera a través de la red, con la maquina donde reside la base de datos.
ARQUITECTURA 3 CAPAS Definición: Es un estilo de programación, su objetivo primordial es la separación de la capa de presentación, 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 algún cambio. En el diseño de sistemas informáticos actuales se suele usar las arquitecturas multilineal o Programación por capas. Además, permite distribuir el trabajo de creación de una aplicación por niveles; cada grupo de trabajo está totalmente abstraído del resto de niveles, de forma que basta con conocer la A PI que existe entre niveles. API (Application Programming Interface) Es el conjunto de funciones y procedimientos o métodos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Ejemplos:
API de Java Microsoft Framework .NET API for SCSI device interfacing Javascript-C de Mozilla Symfony para PHP
1.) Capa de presentación.- Esta capa es la que ve el usuario , presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso.
Esta capa se comunica únicamente con la capa de negocio. También es conocida como interfaz gráfica y debe tener la característica 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 envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultado s, y con la capa de datos, para solicitar al gestor de base de datos para almacenar o recuperar datos de él.
Toda aplicación tiene código para implementar reglas de negocios. Se puede seleccionar almacenar la lógica de negocios sobre cada estación de cliente, u optar por ejecutar la lógica de negocios sobre un servidor de aplicaciones. No toda la lógica de negocio es la misma algunas no requieren un frecuente acceso a los datos, pero una interface de usuario robusta necesitara de la lógica de negocios para la validación en la entrada de campos, cálculos 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 más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio. Ejemplo
Procedimientos Almacenados
Dis eñ o de u na A pli cac ión Fi nal Aplicacion Practica A continuación se listarán algunos ejercicios prácticos de conexiones a Access y a SQL Server por medio de JDBC. Observación: Para los ejemplos se hace uso de Oracle JDeveloper 10g. Ejemplo con Access 1. 2.
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”. En JDeveloper cree una aplicación nueva con el nombre “AccessJDBC”.
3.
Luego de creada la aplicación, se le pedirá la creación del p royecto, 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 información por parte del usuario:
5. Agregue una clase ejecutable al proyecto y denomínela “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 código: 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 conexión a base de datos ****/ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection( (*.mdb)};DBQ=C:/jdbc/dbdata.mdb", "", ""); /**Creando el Statement**/ Statement sentencia = con.createStatement(); /*** Ingreso de datos condicional ****/
"jdbc:odbc:Driver={Microsoft
Access
Driver
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 catálogo de las bases de datos que tiene SQL Server.
1. 2.
Agregue la referencia al driver de SQL Server a la aplicación, para esto sólo haga clic derecho sobre el proyecto
Cree una aplicación denominada “ApplicationSQL” y denomine al proyecto “project1”. 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 botón “Add Library…”. Lo anterior desplegará la ventana para añadir librerías.
4.
En la ventana “Add Library…” haga clic en “New” y aparecerá la ventana para crear la librería 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,
5.
mssqlserver.jar y msutil.jar. 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 más de una instrucción activa en una conexión.
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("Conexión 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("Información del controlador"); System.out.println(" Nombre del controlador: "+ dm.getDriverName()); System.out.println(" Versión del controlador: "+ dm.getDriverVersion ()); System.out.println(" Información de la base de datos "); System.out.println(" Nombre de la base de datos: "+ dm.getDatabaseProductName());
System.out.println(" Versión de la base de datos: "+ dm.getDatabaseProductVersion()); System.out.println("Catálogos disponibles "); rs = dm.getCatalogs(); while(rs.next()){ System.out.println(" catálogo: "+ rs.getString(1)); } rs.close(); rs = null; closeConnection(); } else System.out.println("Error: No hay ninguna conexión 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 gráfica SWING para ver los clientes de Northwind. 1. 2. 3.
En JDeveloper, cree una aplicación denominada “SQLClientesNorth” y denomine al proyecto “project1”. Al igual que la aplicación anterior, en la ventana de propiedades del proyecto agregue una referencia al driver para SQL Server 2000. 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”, aparecerán las siguientes
ventanas:
4.
Ahora en el frame creado, diseñe la siguiente interfaz:
5.
La propiedad text de los botones es la misma que la actionCommand actionCommand y el JTable tiene la la propiedad autoResizeMode en AUTO_RESIZE_OFF. AUTO_RESIZE_OFF. Haga doble clic sobre el botón “filtro“y agregue la línea de código import java.sql.*; y la línea import com.microsoft.jdbc.sql com.microsoft.jdbc.sqlserver.SQLServerD server.SQLServerDriver; river; al comienzo del código. El código del del formulario formulario debe quedar de la siguiente forma:
6. 7.
import java.awt.Dimension; java.awt.Dimension; import java.sql.*; import java.awt.Rectangle; import java.awt.event.ActionEvent; java.awt.event.ActionEvent;
import java.awt.event.ActionListener; java.awt.event.ActionListener; import javax.swing.JButton; javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.JTextField; javax.swing.JTextField; import com.microsoft.jdbc.sqlserver.SQLServerDriver; com.microsoft.jdbc.sqlserver.SQLServerDriver; import javax.swing.JScrollPane; javax.swing.JScrollPane; import javax.swing.table.DefaultTableM javax.swing.table.DefaultTableModel; odel; import javax.swing.table.JTableHeader; 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 J ScrollPane(jTable1); private JScrollPane jScrollPane2 = new JScrollPane(); public ClientesNorth() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } }
private void jbInit() throws Exception { this.getContentPane().setLayout( this.getContentPane().setLayout( null ); this.setSize(new Dimension(603, 416)); jButton1.setText("Filtro"); jButton1.setText("Filtro"); jButton1.setBounds(new jButton1.setBounds(new Rectangle(30, 285, 120, 25)); jButton1.setActionCommand("Filtro" jButton1.setActionCommand("Filtro"); ); jButton1.addActionListener(new jButton1.addActionListener(new ActionListener() ActionListener() { public void actionPerformed(ActionEvent e) { jButton1_actionPerformed(e); jButton1_actionPerformed(e); } }); jButton2.setText("Limpiar"); jButton2.setText("Limpiar"); jButton2.setBounds(new jButton2.setBounds(new Rectangle(445, 285, 115, 25)); jButton2.addActionListener(new jButton2.addActionListener(new ActionListener() ActionListener() { public void actionPerformed(ActionEvent e) { jButton2_actionPerformed(e); jButton2_actionPerformed(e); } }); jButton3.setText("Salir"); jButton3.setText("Salir"); jButton3.setBounds(new jButton3.setBounds(new Rectangle(445, 340, 110, 25)); jButton3.addActionListener(new jButton3.addActionListener(new ActionListener() ActionListener() { public void actionPerformed(ActionEvent e) { jButton3_actionPerformed(e); jButton3_actionPerformed(e); } }); jTextField1.setBounds(new 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 número de columnas. numeroColumnas = metaDatos.getColumnCount(); for(int ass=0 ;ass
View more...
Comments