Establecer una conexión con una base de datos o acceder a cualquier fuente de datos tabular Enviar enunciados SQL. Procesar los resultados



Documentos relacionados
Practica 11: Conexión de Java con Bases de datos Access

Acceso a BDs en Java: JDBC

JDBC. Una mini-introducci. introducción

Práctica 4: Java Remote Method Invocation (RMI)

Programación Orientada a Objetos II. La Plataforma JDBC

%& %)& '$!%*+ $, %%%&$ %%

Introducción a JDBC - Base de datos con Java

JDBC: Java DataBase Conectivity

Acceso a BD desde Java. JDBC

Java y MySQL. Ciclo de ejecución

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

JDBC: EL PUENTE ENTRE JAVA Y LAS BASES DE DATOS. En este articulo se expone la API JDBC (Java DataBase Connetivity), la cual permite el

Bases de Datos Introducción a la Conectividad de

10. JDBC. 10. JDBC Introducción. java.sql

MySQL con Java en MS Windows

Formato para prácticas de laboratorio

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual de NetBeans y XAMPP

Universidad Don Bosco. Materia: Programación Orientada a Objetos Contenido: Modificadores de Acceso y JDBC

DOCENTES FORMADORES UGEL 03 PRIMARIA

En este método la implementación de la interface de usuario donde se produce el evento y la implementación del oyente están en clases separadas.

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

Oracle 12c DISEÑO Y PROGRAMACIÓN

C a p í t u l o. Instalación. Contenido

Modulo 1 El lenguaje Java

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

TciSatSingleW32 Versión 3.1

Microsoft SQL Server 2005

Capitulo 5. Implementación del sistema MDM

Guía práctica de introducción básica a JDBC

Conexión de Mysql con NetBeans

1

ADMINISTRACIÓN DE BASE DE DATOS

Programación Orientada a Objetos Analista Programador Universitario Plan 2008 Año 2010

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario

Práctica sobre compartición de instancias remotas.

Acceso a bases de datos MySQL con PHP

Ingeniería del Software Arquitectura Física en 3 niveles

Desarrollo de Software con

UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERIA DEPARTAMENTO DE COMPUTACIÓN DESARROLLO DE SOFTWARE PARA CONTROL DE INVENTARIO

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Modelo de Objetos Distribuidos

GUÍA DE TRABAJO N 11 LENGUAJE C# Programación de Software Articulación SENA Grado 10 Ing. Néstor Raúl Suarez Perpiñan Página 2 de 11

Curso Online de Microsoft

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

Tablas y Campos Nuevos

MANUAL DE USUARIO DE CUENTAS DE CORREO

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Programación Orientada a Objetos con Java

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

Software de Comunicaciones (2) Manual de Usuario Consola

GUÍA DE TRABAJO GRADO 11. Articulación SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

Bases de datos y JDBC

Instructivo para la sincronización de servidores Intellect

Taller de Programación II J2EE

Lazarus Free Pascal Compiler

&' ' ' !,- (& ', Este tutorial trabaja sobre NetBeans 6.1 y MySQL 5.0. Crear un nuevo proyecto usando la ventana que se indica a continuación: !!

UNIDESYS UNIVERSAL BUSINESS SYSTEMS INSTALACIÓN NUEVO PUESTO DE TRABAJO

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa

XPERTO EN DISEÑO DE PÁGINAS WEB

Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro

DOCUMENTACIÓN DE POWER BUILDER 11. CONSULTA DINAMICA Las consultas dinámicas se realizan cuando power builder no soporta una consulta SQL.

CAPÍTULO 5 IMPLEMENTACIÓN DEL SISTEMA

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Lazarus Free Pascal Compiler

Instalación. Interfaz gráfico. Programación de Backups. Anexo I: Gestión de la seguridad. Manual de Usuario de Backup Online 1/21.

Práctica 2 ACCESO A BASES DE DATOS CON JDBC. 1. Creación de una base de datos en MySQL...1

Tutorial básico del entorno de desarrollo Eclipse.

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar

Guía Taller I Conexión con la Base de Datos Introducción a PostgreSQL

Dossier de prácticas

myappgen Usted Construye la aplicación mientras la ejecuta

Manual de JSP con MySQL

Formatos para prácticas de laboratorio

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Laboratorio de Programación III

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Práctica 5: Common Object Request Broker Architecture CORBA

Introduciendo datos desde el

BROWSERSQL VERSIÓN 3.1 TUTORIAL

Back Up y Restore en la Nueva Versión Revisión: 10/03/2015

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

6.- Este software se instalara como una versión Demo con una duración de 25 días de uso. En el código de validación, se dejara la palabra Demo.

Como detectar conexión del Servidor y SQL?

Universidad ORT - Arquitectura de Software. Requisitos

Federico Peinado

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

Guía de uso del correo electrónico mediante Internet

Ejercicios - Persistencia en Android: ficheros y SQLite

Conectar Flash con Access usando MDM Zinc

MySQL 5 (versiones 5.1 a 5.6) Guía de referencia del desarrollador

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

Solución Examen Junio 2007 (a) Ejercicio GeoTaxi (1h 20 min.) Diagrama de Casos de Uso y. Casos de uso (2,5 puntos) Modelo de Dominio (1,5 puntos)

CURSORES EN SQL SERVER

Tecnología de la Información y la Comunicación. Base de datos. Consultas

U.E JUAN DE VELASCO CREAR DATOS EN SQL

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

Transcripción:

UNIDAD 9. Acceso a Base de Datos desde Java 9.1 Open Database Connectivity (ODBC) Open Database Connectivity (ODBC) es un estándar desarrollado por Microsoft, el cual permite conectarse a un DBMS (Database Management Systems). Este API (Application Programming Interface) es independiente del lenguaje de programación y del manejador de base de datos, ambos deben de ser compatibles con el ODBC. El ODBC es el intermediario entre las aplicaciones y la base de datos, permite usar el mismo código para trabajar con cualquier base de datos con la restricción de usar el estándar ANSI SQL en los comandos. 9.2 API JDBC (Java DataBase Connectivity) El API JDBC es el estándar de conexión entre el lenguaje de programación Java y un amplio rango de bases de datos. Este API hace posible la conexión con un DBMS (DataBase Management System), permite enviar enunciados SQL y procesar los resultados. El uso del API JDBC hace posible llevar a cabo lo siguiente: Establecer una conexión con una base de datos o acceder a cualquier fuente de datos tabular Enviar enunciados SQL. Procesar los resultados En la siguiente figura se ven las operaciones que pueden realizarse en una base de datos. Cada uno de los rectángulos representa una clase o interfaz de JDBC que tiene un rol en el acceso a una base de datos relacional. Todo el trabajo con el JDBC inicia con la clase DriveManager, que es la que establece las conexiones con las fuentes de datos, mediante el driver JDBC. El objeto DriverManager crea una conexión con la base de datos mediante el driver. Los comandos SQL (Statements) se envían a la base de datos a través de la conexión establecida. Cuando el comando genera resultados estos se almacenan en un objeto ResultSet. DriverManager Connection Statement Driver ResultSet Ing. Alma Leticia Palacios Guerrero Pág. 89

9.3 Instalación del driver Jconnector Antes de establecer cualquier conexión se debe instalar el driver Java-Mysql. El Driver para Mysql se llama connector/j, y está disponible en http://dev.mysql.com/downloads/connector/j/5.0.html. El archivo zip debe desempaquetarse en un directorio, por ejemplo en c:\mysqldriver. Al desempaquetar el driver se crea el directorio mysql-connector-java-5.0.0-beta en el que se encontrarán los siguientes archivos: ahora para que Java localice la clase que implementa el driver esto es la clase com.mysql.jdbc.driver, debe agregar a la variable CLASSPATH la ruta donde está el archivo mysql-connector-java-5.0.0-betabin.jar. Lo anterior se hace con la línea: En ocasiones el procedimiento anterior no es suficiente para que java ubique el driver, en este caso otra solución sería copiar el archivo mysql-connector-java-5.0.0-beta-bin.jar al directorio donde se haya instalado el JRE: D:\Program Files\Java\jre1.5.0_06\lib\ext Ing. Alma Leticia Palacios Guerrero Pág. 90

9.4 Pasos para establecer la conexión java-dbms El establecimiento de la conexión entre la aplicación java y la base de datos implica los siguientes pasos: Paso1: Registro del driver, en este caso el driver para mysql. Dado que se va a trabajar con mysql se requiere registrar el driver para mysql, esto se hace con el método Class.forName. String driver = "com.mysql.jdbc.driver"; Class.forName( driver ).newinstance(); Paso 2: Construcción de la URL Una vez que el driver ha sido cargado entonces se puede hacer la conexión con el método DriverManager.getConnection. Este método requiere los parámetros url, login y password. El url (Uniform Resource Locator), especifica la forma cómo se va a conectar a conectar la base de datos, el servidor en el que se encuentra y el nombre de la base de datos. Para este curso la conexión se va a realizar usando el puente jdbc-mysql, la base de datos estará ubicada en la misma máquina que la aplicación, por lo tanto es localhost y finalmente el nombre de la base de datos es la que Mysql provee por defaul: test. driver=new String("com.mysql.jdbc.Driver"); url=new String("jdbc:mysql://localhost/test"); login=new String("root"); password=new String(" "); conexion=drivermanager.getconnection(url,login,password); Las operaciones de registro del driver y establecimiento de la conexión generan las excepciones java.lang.classnotfoundexception, java.lang.instantiationexception y java.sql.sqlexception por lo que es necesario atraparlas por medio del bloque try-catch. El siguiente segmento de código sirve para probar una conexión a una base de datos. import java.sql.*; class BasedeDatos{ String driver,url,login,password; Connection conexion; BasedeDatos(){ driver="com.mysql.jdbc.driver"; url=new String("jdbc:mysql://localhost/test"); login=new String("root"); password=new String(" "); try{ Class.forName(driver).newInstance(); conexion=drivermanager.getconnection(url,login,password); System.out.println("Base de Datos ok..."); catch (Exception exc){ System.out.println("Error al tratar de abrir la base de Datos"); class PruebaBasedeDatos{ public static void main(string args[]){ BasedeDatos bd =new BasedeDatos(); Ing. Alma Leticia Palacios Guerrero Pág. 91

9.5 Envío de comandos SQL al DBMS Statement es la clase usada para ejecutar un enunciado SQL y regresar los resultados que el enunciado produce. Por default, solamente un objeto ResultSet por enunciado puede estar abierto, sin embargo, si la lectura de un objeto ResultSet es alternada con la lectura de otro objeto, cada uno debe ser generado por diferentes objetos Statement. 9.5.1 Métodos de la clase Statement Método Descripción boolean execute(string sql) Ejecuta el enunciado SQL especificado. ResultSet executequery(string sql) Ejecuta el enunciado SQL indicado, regresa un solo objeto ResultSet. int ExecuteUpdate(String sql) Ejecuta el enunciado SQL especificado, el cual puede ser INSERT, UPDATE, DELETE un enunciado SQL que no regresa resultados. 9.6 Creación de Base de Datos Una vez establecida una conexión con el DBMS es posible crear una base de datos nueva con el enunciado CREATE DATABASE. La opción IF NOT EXIST evita que se produzca un error si la base de datos ya existe. import java.sql.*; class MysqlCreaBase{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; System.out.println( "\n=> loading driver:" ); Class.forName(driver).newInstance(); System.out.println( "OK" ); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void crearbase(){ String crear="create DATABASE IF NOT EXISTS alumnos; "; try{ Statement stmt=conexion.createstatement(); stmt.execute(crear); catch (java.sql.sqlexception exc){ System.out.println("Error "); class PruebaMysqlCreaBase{ public static void main(string args[]) { MysqlCreaBase mysql=new MysqlCreaBase(); mysql.conectar(); mysql.crearbase(); Ing. Alma Leticia Palacios Guerrero Pág. 92

9.7 Creación de Tablas Una vez que ya existe una conexión con una base de datos, es posible crear una tabla usando el enunciado SQL CREATE. El enunciado se envía usando el método executeupdate. Una operación de este tipo genera una excepción java.sq.sqlexception, por ejemplo si la tabla ya existe. En el ejemplo el uso de IF EXISTS evita que se produzca un error si la tabla ya existe. import java.sql.*; class MysqlCrearTablas{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; System.out.println( "\n=> loading driver:" ); Class.forName(driver).newInstance(); System.out.println( "OK" ); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void creartablas(){ String crear="create TABLE IF NOT EXISTS datos (nombre VARCHAR(40), edad INTEGER, sueldo FLOAT); "; try{statement stmt=conexion.createstatement(); stmt.execute(crear); catch (java.sql.sqlexception exc){ System.out.println("Error "); class PruebaMysqlCrearTablas{ public static void main(string args[]) { Mysql mysql=new Mysql(); mysql.conectar(); mysql.creartablas(); Ing. Alma Leticia Palacios Guerrero Pág. 93

9.8 Inserción de datos en una tabla. El comando SQL para agregar datos a una tabla ya existente es INSERT. Se envía a MySql de la misma forma que el comando anterior, primero se conforma el enunciado en una cadena y después se envía a través de un objeto Statement. Es importante hacer notar que de acuerdo a la sintaxis SQL los valores String que se vayan a insertar deben estar encerrados entre apóstrofes. String enun="insert INTO datos VALUES (' " + nombre + "'," + dias +"," +sueldo +");"; En el enunciado los nombre, dias y sueldo serán sustituidos por sus valores para insertarse en la tabla. 9.8.1 Ejemplo de Inserción de datos en una tabla import java.awt.*; import java.sql.*; import java.awt.event.*; class Persona{ String nombre; double sueldo; int dias; class MysqlAgregar{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; System.out.println( "\n=> loading driver:" ); Class.forName(driver).newInstance(); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void agregardatos(){ Persona datos=new Persona(); Formas forma=new Formas(); forma.formaagregar(); void grabardatos(persona datos){ String comando="insert INTO datos VALUES (' " + datos.nombre + "'," + datos.dias +"," +datos.sueldo +");"; try{ Statement stmt=conexion.createstatement(); stmt.executeupdate(comando); System.out.println("Registro agregado!"); catch( java.sql.sqlexception er){ System.out.println("No se pudo realizar la operacion"); Ing. Alma Leticia Palacios Guerrero Pág. 94

continua Ejemplo 9.8.1 Inserción de datos en una tabla class Formas{ TextField tnombre,tdias,tsueldo; Button ok, cancelar; protected Frame v; EventosBoton monitorboton; ManejoDeEventosFrame monitorframe; void formaagregar(){ v=new Frame("Agregar datos"); v.setlayout(new FlowLayout() ); v.add(new Label("Nombre") ); v.add(tnombre=new TextField(40) ); v.add(new Label("Dias") ); v.add(tdias=new TextField("0",2) ); v.add(new Label("Sueldo") ); v.add(tsueldo=new TextField("0",40) ); v.add(ok=new Button("ok")); v.add(cancelar=new Button("cancelar") ); monitorboton=new EventosBoton(); ok.addactionlistener(monitorboton); cancelar.addactionlistener(monitorboton); v.addwindowlistener(monitorframe =new ManejoDeEventosFrame() ); v.pack(); v.setvisible(true); void recuperadatos(){ Persona datos=new Persona(); datos.nombre=tnombre.gettext(); try{ datos.dias=new Integer(tDias.getText() ).intvalue(); catch( Exception exc){ System.out.println("Error al introducir los datos"); tdias.settext("0");datos.dias=0; try{ datos.sueldo=new Double(tSueldo.getText() ).doublevalue(); catch( Exception exc){ System.out.println("Error al introducir los datos"); tsueldo.settext("0");datos.sueldo=0; if (datos.nombre.length()>0) grabardatos(datos); else System.out.println("Nombre vacio"); void limpiatexto(){ tnombre.settext(" "); tdias.settext("0"); tsueldo.settext("0"); Ing. Alma Leticia Palacios Guerrero Pág. 95

continua Ejemplo 9.8.1 Inserción de datos en una tabla class EventosBoton implements ActionListener{ public void actionperformed(actionevent evento){ Object fuente=evento.getsource(); if(fuente==ok) recuperadatos(); if(fuente==cancelar) limpiatexto(); class ManejoDeEventosFrame extends WindowAdapter{ public void windowclosing(windowevent evento){ if (evento.getsource()==v){ v.setvisible(false); v.dispose(); class PruebaMysqlAgregar{ public static void main(string args[]) { MysqlAgregar mysql=new MysqlAgregar(); mysql.conectar(); mysql.agregardatos(); Pantalla generada por el ejemplo 9.8.1 Ing. Alma Leticia Palacios Guerrero Pág. 96

9.9 Consulta general Los enunciados SQL que regresan resultados se envían al DBMS a través del comando executequery. El comando SELECT * FROM datos; regresa todos los registros que están en la tabla y se depositan en un objeto de la clase ResultSet. Para visualizar todos los registros se implementa un ciclo que recorre el conjunto de resultado, extrae los valores de cada campo y avanza al siguiente registro. 9.9.1 Clase ResultSet La clase ResulSet es un tabla de datos representando el resultados de una búsqueda en una base de datos. 9.9.2 Métodos de la clase ResultSet Método void afterlast() boolean next() void beforefirst() boolean first String getstring(int n) int getint(int n) float getfloat(int n) Descripción Mueve el cursor después del último renglón del objeto ResultSet. Avanza al siguiente registro dentro de un objeto ResultSet. Regresa falso si la operación no es posible. Mueve el cursor antes del primer renglón del objeto ResultSet. Retrocede un renglón dentro de un objeto ResultSet. Regresa falso si la operación no es posible. Regresa la cadena que se encuentra en el campo n del registro actual. Regresa el valor entero que está en el campo n del registro actual. Regresa el valor flotante que está en el campo n del registro actual. 9.9.3 Implementación de consulta general en una lista desplazable import java.awt.*; import java.sql.*; import java.awt.event.*; class Persona{ String nombre; double sueldo; int dias; class MysqlAgregar{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; System.out.println( "\n=> loading driver:" ); Class.forName(driver).newInstance(); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void consultageneral(){ Formas forma=new Formas(); forma.formamostrar(); Ing. Alma Leticia Palacios Guerrero Pág. 97

continua 9.9.3 Implementación de consulta general en una lista desplazable class Formas{ Frame v; ManejoDeEventosFrame monitorframe; void formamostrar(){ String n; double s; int d; v=new Frame(); v.setlayout(new FlowLayout() ); v.settitle("mostrando Datos"); v.addwindowlistener(monitorframe= new ManejoDeEventosFrame() ); java.awt.list todos=new java.awt.list(5); try{statement stmt=conexion.createstatement(); ResultSet result= stmt.executequery("select * from datos;"); while(result.next() ){ n=result.getstring(1); d=result.getint(2); s=result.getfloat(2); todos.add(n+" "+ String.valueOf(d)+" "+ String.valueOf(s) ); catch(java.sql.sqlexception er){ System.out.println("No se pudo realizar la operacion"); v.add(todos); v.pack(); v.setvisible(true); class ManejoDeEventosFrame extends WindowAdapter{ public void windowclosing(windowevent evento){ if (evento.getsource()==v){ v.setvisible(false); v.dispose(); class PruebaMysqlMostrar{ public static void main(string args[]) { MysqlAgregar mysql=new MysqlAgregar(); mysql.conectar(); mysql.consultageneral() ; En el ejemplo anterior, los registros obtenidos de la base de datos se muestran en una lista desplazable. Ing. Alma Leticia Palacios Guerrero Pág. 98

9.9.4 Implementación de consulta general mostrando un solo registro por ventana. import java.awt.*; import java.sql.*; import java.awt.event.*; class Persona{ String nombre; double sueldo; int dias; class MysqlMostrar2{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; Class.forName(driver).newInstance(); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void consultageneral(){ Formas forma=new Formas(); forma.formamostrar(); class Formas{ TextField tnombre,tdias,tsueldo; Button ok, cancelar,siguiente,anterior; Frame v; EventosBoton monitorboton; ManejoDeEventosFrame monitorframe; ResultSet result; void formamostrar(){ String n=""; double s=0; int d=0; v=new Frame("Mostrando Registros"); v.setlayout(new FlowLayout() ); v.add(new Label("Nombre") ); v.add(tnombre=new TextField(40) ); v.add(new Label("Dias") ); v.add(tdias=new TextField("0",2) ); v.add(new Label("Sueldo") ); v.add(tsueldo=new TextField("0",40) ); v.add(anterior=new Button("anterior")); v.add(siguiente=new Button("siguiente") ); monitorboton=new EventosBoton(); v.addwindowlistener(monitorframe =new ManejoDeEventosFrame() ); try{ Statement stmt=conexion.createstatement(); result= stmt.executequery("select * from datos;"); catch (java.sql.sqlexception er){ System.out.println("No se pudo realizar la operacion"); siguiente.addactionlistener(monitorboton); anterior.addactionlistener(monitorboton); v.pack(); v.setvisible(true); Ing. Alma Leticia Palacios Guerrero Pág. 99

continua 9.9.5 Implementación de consulta general mostrando un solo registro por ventana. void registroanterior(){ String n=""; double s=0; int d=0; try{ result.previous(); n=result.getstring(1); d=result.getint(2); s=result.getfloat(3); catch(java.sql.sqlexception er){ System.out.println("No hay registro anterior"); tnombre.settext(n); tdias.settext(new Integer(d).toString() ); tsueldo.settext(new Double(s).toString() ); void registrosiguiente(){ String n=""; double s=0; int d=0; try{ result.next(); n=result.getstring(1); d=result.getint(2); s=result.getfloat(3); catch(java.sql.sqlexception er){ System.out.println("No hay registro siguiente"); tnombre.settext(n); tdias.settext(new Integer(d).toString() ); tsueldo.settext(new Double(s).toString() ); class EventosBoton implements ActionListener{ public void actionperformed(actionevent evento){ Object fuente=evento.getsource(); if (fuente==anterior) registroanterior(); if (fuente==siguiente) registrosiguiente(); Ing. Alma Leticia Palacios Guerrero Pág. 100

continua 9.9.5 Implementación de consulta general mostrando un solo registro por ventana. class ManejoDeEventosFrame extends WindowAdapter{ public void windowclosing(windowevent evento){ if (evento.getsource()==v){ v.setvisible(false); v.dispose(); class PruebaMysqlMostrar2{ public static void main(string args[]) { MysqlMostrar2 mysql=new MysqlMostrar2(); mysql.conectar(); mysql.consultageneral() ; En el ejemplo 9.9.5 cada registro se muestra en una ventana, se puede avanzar o retroceder en el conjunto de datos a través de los botones anterior y siguiente. Ing. Alma Leticia Palacios Guerrero Pág. 101

9.9.6 Consulta por campo específico En los ejemplos anteriores la consulta tenía como resultado todos los registros contenidos en la tabla, pero si se desea ver solamente los registros que cumplan con cierta condición es necesario modificar el enunciado SQL para limitar los resultados. En el ejemplo, los resultados van a ser aquellos registros donde el contenido del campo nombre sea igual al campo texto buscar. 9.9.7 Ejemplo Consulta por campo específico import java.awt.*; import java.sql.*; import java.awt.event.*; class Persona{ String nombre; double sueldo; int dias; class MysqlConsulta{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; Class.forName(driver).newInstance(); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void consulta(){ Formas forma=new Formas(); forma.busqueda(); class Formas{ TextField tnombre,tdias,tsueldo,tbuscar; Button buscar,siguiente,anterior; Frame v, vcaptura; EventosBoton monitorboton; ManejoDeEventosFrame monitorframe; ResultSet result; void busqueda(){vcaptura=new Frame("Consulta por nombre"); vcaptura.setlayout(new FlowLayout() ); vcaptura.add(new Label("Nombre") ); vcaptura.add(tbuscar= new TextField (40) ); vcaptura.add(buscar=new Button("buscar")); monitorboton=new EventosBoton(); vcaptura.addwindowlistener(monitorframe =new ManejoDeEventosFrame() ); buscar.addactionlistener(monitorboton); vcaptura.pack(); vcaptura.setvisible(true); Ing. Alma Leticia Palacios Guerrero Pág. 102

continua 9.9.7 Implementación de consulta por campo específico void formaconsulta(){ String n=""; double s=0; int d=0; v=new Frame("Mostrando Registros"); v.setlayout(new FlowLayout() ); v.add(new Label("Nombre") ); v.add(tnombre=new TextField(40) ); v.add(new Label("Dias") ); v.add(tdias=new TextField("0",2) ); v.add(new Label("Sueldo") ); v.add(tsueldo=new TextField("0",40) ); v.add(anterior=new Button("anterior")); v.add(siguiente=new Button("siguiente") ); monitorboton=new EventosBoton(); v.addwindowlistener(monitorframe =new ManejoDeEventosFrame() ); try{ Statement stmt=conexion.createstatement(); result= stmt.executequery("select * FROM datos WHERE nombre=' "+tbuscar.gettext() + "';"); System.out.println("Buscando a " +tbuscar.gettext() ); if (result.next()) { n=result.getstring(1); d=result.getint(2); s=result.getfloat(3); tnombre.settext(n); tdias.settext(new Integer(d).toString() ); tsueldo.settext(new Double(s).toString() ); siguiente.addactionlistener(monitorboton); anterior.addactionlistener(monitorboton); v.pack(); v.setvisible(true); catch(java.sql.sqlexception er){ System.out.println("No se pudo realizar la operacion"); void registroanterior(){ String n=""; double s=0; int d=0; try{result.previous(); n=result.getstring(1); d=result.getint(2); s=result.getfloat(3); catch(java.sql.sqlexception er){ System.out.println("No hay registro anterior"); tnombre.settext(n); tdias.settext(new Integer(d).toString() ); tsueldo.settext(new Double(s).toString() ); Ing. Alma Leticia Palacios Guerrero Pág. 103

continua 9.9.7 Implementación de consulta por campo específico void registrosiguiente(){ String n=""; double s=0; int d=0; try{ result.next(); n=result.getstring(1); d=result.getint(2); s=result.getfloat(3); catch(java.sql.sqlexception er){ System.out.println("No hay registro siguiente"); tnombre.settext(n); tdias.settext(new Integer(d).toString() ); tsueldo.settext(new Double(s).toString() ); class EventosBoton implements ActionListener{ public void actionperformed(actionevent evento){ Object fuente=evento.getsource(); if(fuente==anterior) registroanterior(); if(fuente==siguiente) registrosiguiente(); if (fuente==buscar) formaconsulta(); class ManejoDeEventosFrame extends WindowAdapter{ public void windowclosing(windowevent evento){ if (evento.getsource()==vcaptura){ if (v!=null){ v.setvisible(false); v.dispose(); vcaptura.setvisible(false); vcaptura.dispose(); if (evento.getsource()==v){ v.setvisible(false); v.dispose(); class PruebaMysqlConsulta{ public static void main(string args[]) { MysqlConsulta mysql=new MysqlConsulta(); mysql.conectar(); mysql.consulta() ; Ventanas del ejemplo 9.9.7 Ing. Alma Leticia Palacios Guerrero Pág. 104

9.10 Actualización de Registros. La modificación de los datos ya almacenados en una tabla se hace con el comando SQL UPDATE. Por ser un comando que afecta a la base de datos, se envia a través de un objeto Statement con el método executeupdate. El comando Update tiene la siguiente sintaxis:! " "# Cabe hacer notar que el comando UPDATE actualizan solamante los campos que se incluyen en el enunciado, los campos que no se incluyan permanecen con el valor original. 9.10.1 Ejemplo de Actualización de Registros import java.awt.*; import java.sql.*; import java.awt.event.*; class Persona{ String nombre; double sueldo; int dias; class MysqlCambios{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; System.out.println( "\n=> loading driver:" ); Class.forName(driver).newInstance(); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void cambios(){ Formas forma=new Formas(); forma.busqueda(); void grabardatos(persona datos){ String comando="update datos SET sueldo="+datos.sueldo +",edad="+datos.dias+ " WHERE nombre='"+ datos.nombre + "';"; try{ Statement stmt=conexion.createstatement(); stmt.executeupdate(comando); catch( java.sql.sqlexception er){ System.out.println("No se pudo realizar la operacion"); Ing. Alma Leticia Palacios Guerrero Pág. 105

continua 9.10.1 Ejemplo de Actualización de Registros class Formas{ TextField tnombre,tdias,tsueldo,tbuscar; Button buscar,modificar; Frame v, vcaptura; EventosBoton monitorboton; ManejoDeEventosFrame monitorframe; ResultSet result; void busqueda(){ vcaptura=new Frame("Modificaciones"); vcaptura.setlayout(new FlowLayout() ); vcaptura.add(new Label("Nombre") ); vcaptura.add(tbuscar= new TextField (40) ); vcaptura.add(buscar=new Button("buscar")); monitorboton=new EventosBoton(); vcaptura.addwindowlistener(monitorframe=new ManejoDeEventosFrame() ); buscar.addactionlistener(monitorboton); vcaptura.pack(); Captura.setVisible(true); void formacambios(){ String n=""; double s=0; int d=0; v=new Frame("Modificaci\u00f3n de Registros"); v.setlayout(new FlowLayout() ); v.add(new Label("Nombre") ); v.add(tnombre=new TextField(40) ); v.add(new Label("Dias") ); v.add(tdias=new TextField("0",2) ); v.add(new Label("Sueldo") ); v.add(tsueldo=new TextField("0",40) ); modificar=new Button("Modificar"); v.add(modificar); monitorboton=new EventosBoton(); v.addwindowlistener(monitorframe =new ManejoDeEventosFrame() ); try{ Statement stmt=conexion.createstatement(); result=stmt.executequery("select * FROM datos WHERE nombre=' " + if (result.next()) { tbuscar.gettext() + "';"); n=result.getstring(1); d=result.getint(2); s=result.getfloat(3); tnombre.settext(n); tnombre.seteditable(false); tdias.settext(new Integer(d).toString() ); tsueldo.settext(new Double(s).toString() ); modificar.addactionlistener(monitorboton); v.pack(); v.setvisible(true); catch(java.sql.sqlexception er){ System.out.println("No se pudo realizar ); Ing. Alma Leticia Palacios Guerrero Pág. 106

continua 9.10.1 Ejemplo de Actualización de Registros void recuperadatos(){ Persona datos=new Persona(); datos.nombre=tnombre.gettext(); try{ datos.dias=new Integer(tDias.getText() ).intvalue(); catch( Exception exc){ tdias.settext("0");datos.dias=0; try{ datos.sueldo=new Double(tSueldo.getText() ).doublevalue(); catch( Exception exc){ tsueldo.settext("0");datos.sueldo=0; grabardatos(datos); class EventosBoton implements ActionListener{ public void actionperformed(actionevent evento){ Object fuente=evento.getsource(); if(fuente==modificar) {recuperadatos(); if (fuente==buscar) {buscar.setenabled(false); formacambios(); class ManejoDeEventosFrame extends WindowAdapter{ public void windowclosing(windowevent evento){ if (evento.getsource()==vcaptura){ if (v!=null){ v.setvisible(false); v.dispose(); vcaptura.setvisible(false); vcaptura.dispose(); if (evento.getsource()==v){ v.setvisible(false); v.dispose(); buscar.setenabled(true); class PruebaMysqlCambios{ public static void main(string args[]) { MysqlCambios mysql=new MysqlCambios(); mysql.conectar(); mysql.cambios() ; Ventanas del ejemplo 9.10.1 Ing. Alma Leticia Palacios Guerrero Pág. 107

9.11 Eliminación de Registros El comando para borrar un registro en SQL es DELETE, se envía a MySQL desde Java a través del método executeupdate de Statement. La sintaxis de DELETE es 9.11.1 Ejemplo de Eliminación de Registros DELETE FROM <tabla> where <campo=criterio>; import java.awt.*; import java.sql.*; import java.awt.event.*; class Persona{ String nombre; double sueldo; int dias; class MysqlBajas{ Connection conexion; void conectar(){ try { String driver = "com.mysql.jdbc.driver"; System.out.println( "\n=> loading driver:" ); Class.forName(driver).newInstance(); String url = "jdbc:mysql://localhost/test"; System.out.println( "\n=> connecting:" ); conexion=drivermanager.getconnection( url, "root", "ginger" ); System.out.println( "OK" ); catch( Exception x ) { System.err.println( x ); void bajas(){ Formas forma=new Formas(); forma.busqueda(); void borrardatos(persona datos){ String comando=new String("DELETE FROM datos WHERE nombre='"+ datos.nombre + "';"); System.out.println(comando); try{ Statement stmt=conexion.createstatement(); stmt.executeupdate(comando); System.out.println("Registro modificado!"); catch( java.sql.sqlexception er){ System.out.println("No se pudo realizar la operacion"); continua 9.11.1 Ejemplo de Eliminación de Registros Ing. Alma Leticia Palacios Guerrero Pág. 108

class Formas{ TextField tnombre,tdias,tsueldo,tbuscar; Button borrar; Frame v; EventosBoton monitorboton; ManejoDeEventosFrame monitorframe; ManejaEventosTexto monitortexto; ResultSet result; void busqueda(){ v=new Frame("Bajas"); v.setlayout(new FlowLayout() ); v.add(new Label("Nombre") ); v.add(tbuscar= new TextField (20) ); v.add(new Label("Dias") ); v.add(tdias=new TextField("0",2) ); v.add(new Label("Sueldo") ); v.add(tsueldo=new TextField("0",10) ); v.add(borrar=new Button("borrar")); monitorboton=new EventosBoton(); v.addwindowlistener(monitorframe =new ManejoDeEventosFrame() ); monitortexto=new ManejaEventosTexto(); tbuscar.addtextlistener(monitortexto); borrar.addactionlistener(monitorboton); v.pack(); v.setvisible(true); void muestradatos(){ Persona datos=new Persona(); try{ Statement stmt=conexion.createstatement(); result=stmt.executequery("select * FROM datos WHERE nombre=' " + tbuscar.gettext() + "';"); if (result.next()) { datos.nombre=result.getstring(1); datos.dias=result.getint(2); datos.sueldo=result.getfloat(3); tbuscar.seteditable(false); tdias.settext(new Integer(datos.dias).toString() ); tdias.seteditable(false); tsueldo.settext(new Double(datos.sueldo).toString() ); tsueldo.seteditable(false); borrardatos(datos); tbuscar.seteditable(true); catch( java.sql.sqlexception er){ System.out.println("No se pudo realizar la operacion"); Ing. Alma Leticia Palacios Guerrero Pág. 109

continua 9.11.1 Ejemplo de Eliminación de Registros class EventosBoton implements ActionListener{ public void actionperformed(actionevent evento){ Object fuente=evento.getsource(); if(fuente==borrar) {borrar.setenabled(false); muestradatos(); class ManejaEventosTexto implements TextListener{ public void textvaluechanged(textevent e){ Object fuente=e.getsource(); if (fuente==tbuscar){ borrar.setenabled(true); tdias.settext(""); tsueldo.settext("") class ManejoDeEventosFrame extends WindowAdapter{ public void windowclosing(windowevent evento){ if (evento.getsource()==v){ v.setvisible(false); v.dispose(); class PruebaMysqlBajas{ public static void main(string args[]) { MysqlBajas mysql=new MysqlBajas(); mysql.conectar(); mysql.bajas() ; Pantallas producidas por el programa ejemplo de eliminacion de registros Ing. Alma Leticia Palacios Guerrero Pág. 110