Manual Oficial de Lenguajed e Programacion-I- 3er ciclo (Reparado).docx

June 16, 2019 | Author: SaulFloresAsto | Category: Net Beans, Integrated Development Environment, Java (Programming Language), Computing, Tecnología
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF