Está en la página 1de 31

UNICA - FIS

JAVA JSP INT A LAS BASES DE DATOS TEMA 1: JAVA JSP INTRODUCCIN En este captulo se analizan en general dos problemas: a) Variables que permitan almacenar conjuntos de datos como los arreglos pero con distintos tipos de datos, este primer problema se resolva en la antigedad usando las llamadas variables registro. b) Permanencia de los datos, hasta ahora todos los datos capturados, calculados, creados, etc., al terminar o cerrarse el programa se pierden y es necesario volver a capturarlos en la siguiente ejecucin o corrida del programa. Tradicionalmente en programacin antigua, este segundo problema se resolva usando el concepto de archivos, que son medios permanentes de almacenamiento de datos en dispositivos o perifricos apropiados generalmente disco, cinta magntica, etc. TEMA 2: JAVA JSP MODELOS DE ALMACENAMIENTO DE DATOS En general existen dos modelos de almacenamiento de datos en los sistemas de informacin. a) El modelo tradicional de archivos que se construye con los siguientes elementos: 1.- Variables Registros, que como ya se indic son variables que permiten almacenar conjuntos de datos de diverso tipo. Tambin se pueden definir como representaciones simblicas y programticas de entidades lgicas de informacin ejemplos de variables registros son alumnos, empleados, clientes, proveedores, productos, autos, etc. Estas variables registros tambin ocupan programas o rutinas de programas para procesarlas por ejemplo un procedimiento, modulo o subrutina se encargara de capturar los datos que contendr la variable registro otro procedimiento para corregir los datos que ya contiene, otro procedimiento para desplegarlos en pantalla ya cuando a sido capturada y as sucesivamente. 2.-Archivos, que en principio pueden entenderse como una especie de almacenes o bodegas para almacenamiento de datos en forma permanente en disco es decir, un archivo de empleados en disco contiene todos los datos de todos los empleados de una empresa. Igualmente los archivos ocupan su propios programas o subrutinas o procedimientos especializados por ejemplo, procedimientos para crear los archivos, para almacenar o dar de altas los registros en el archivo, procedimientos para buscar un registro determinado, procedimiento para dar de baja un registro, etc. 3.- Una aplicacin que es un programa que se encarga de coordinar todos los programas descritos y presentar a usuarios de manera clara, fcil, accesible y entendible.
1

UNICA - FIS

Salta a la vista que construir un sistema de informacin por ejemplo para una tienda de vdeo o para un refaccionario etctera, involucra un gran cantidad de trabajo de programacin puesto que hay que programar muchas variables registros, muchos archivos en disco y construir una o muchas aplicaciones. Este modelo se usa todava en la actualidad pero es obvio que mejores maneras, ms rpidas, seguras y eficientes existen en la actualidad para resolver estos problemas, y esto nos lleva al segundo modelo de datos. b) Modelo de Bases de Datos Relacinales: este modelo intenta simplificar la construccin de sistemas de informacin como los antes descritos, este modelo solo incluye en forma simple los siguientes elementos: b.1) Tablas, es una combinacin de las variables registro y de los archivos del modelo anterior. Es decir cuando un programador moderno define o declara una tabla en un programa realmente est haciendo dos cosas por el precio de una es decir, crea una variable registro en memoria que almacenara los datos y al mismo tiempo ya est creando un archivo en disco que se llamara igual que la tabla y que automticamente se convertir en un espejo de la tabla en memoria es decir, cuando se cargan los datos en la tabla en memoria tambin se estarn cargando en disco. Otra vez cuando el programador escribe cdigo para capturar los datos y mandarlos a la tabla en pantalla-memoria, realmente tambin lo est haciendo para darlos de alta en disco. b.2) Aplicacin, que tiene la misma funcin que en el modelo anterior. Como se observa en este modelo es ms sencillo construir sistemas de informacin puesto que la parte programtica se reduce ampliamente. TEMA 3: JAVA JSP MYSQL TABLAS Una Tabla simple, representa una unidad de informacin de una entidad fsica o lgica de informacin: Ej. Tabla Empleado:

Clave Empleado Nombre Empleado Direccin Empleado Edad Empleado Telfono Empleado etc. Empleado

UNICA - FIS

Tabla Proveedorr:

Clave Proveedor Nombre Proveedor Empresa Proveedor Telfono Proveedor Fax Proveedor Celular Proveedor etc. Proveedor

Tabla Autos:

Numero de Serie Modelo Marca Tipo Color Capacidad etc.

REGLAS: Observar que cada tabla empieza con una clave generalmente de tipo numrica. Todos los elementos de la tabla solo hacen referencia hacia el mismo ente o sujeto de informacin. Cada elemento solo representa o debe contener un solo dato de informacin. No se respetan o siguen al pie de la letra estos tres postulados y empiezan los problemas al tiempo de programacin.

Existe una segunda forma o manera de representar las tablas, ejemplo:

Tabla: Camisas NUMCAMISA 1 2 3 Tabla: Clientes NUMCLIENTE 1 2 3 NOMCLIENTE JUAN PEREZ LUIS SANCHEZ ROSA MARES DIRCLIENTE AV ABA 2233 CALLE ZETA 3434 CALLEJON NORTE
3

MARCA JEANS VOLIS GENERICA

ESTILO SPORT VESTIR CAMISETA

MEDIDA GRANDE MEDIANA LARGA

COLOR AZUL NEGRA MORADO

MATERIAL ALGODON POLIESTER RARON

TELCLIENTE 2345678 4567899 567890

UNICA - FIS

Recordar siempre, una tabla almacena o representa un conjunto de datos del mismo tipo o entidad, la tabla de alumnos es para almacenar y manipular muchos alumnos, la tabla de productos es para almacenar y manipular muchos alumnos, en resumen si en un problema de informacin solo se presenta una instancia o rengln de una entidad lgica, entonces no es tabla, es un encabezado. TAREAS PROGRAMACIN JAVA JSP 1.-CONSTRUIR EN CUADERNO LAS SIGUIENTES TABLAS, LA MITAD DE ELLAS CON EL PRIMER FORMATO Y LA SEGUNDA MITAD CON EL SEGUNDO FORMATO. 1.- PACIENTES 2.- PERROS 3.- PLUMAS 4.- MERCANCAS 5.- PELCULAS 6.- MEDICINAS 7.- MAESTROS 8.- MATERIAS 9.- COMPUTADORAS 10.- BANCOS

TEMA 4: JAVA JSP TABLAS El trabajo correcto con bases de datos relacinales se divide en dos grandes pasos o etapas bien diferenciadas entre s: En la primera etapa se disea la tabla con sus campos, llaves y condiciones especiales, luego se usa un paquete o programa de software especializado en la construccin, mantenimiento y administracin de la base de datos, este software se usa para convertir la tabla o tablas ya bien diseadas en un archivo en disco. Existe software especializado en bases de datos, los llamados servidores de bases de datos, los tres ms comunes son SQL-SERVER de Microsoft, ORACLE Server de Oracle, MYSQL Open Source, en estos casos la base de datos( o conjunto de tablas que tienen relaciones comunes entre s) residen en un servidor de bases de datos especializado en algn lugar cercano o lejano en una red chica, mediana o grande. Otros paquetes o software ms pequeos y comunes tambin reciben el nombre de DBMS(DATA BASE MANAGEMENT SYSTEM) o sistemas administradores de bases de datos. Este tipo de software se especializa en la creacin, mantenimiento, seguridad, privacidad, etc. de un conjunto de tablas o mejor dicho una base de datos, DBMS comunes son access, postgres, fox, clipper, etc.

UNICA - FIS

Usaremos MYSQL como nuestro generador de bases de datos y recordar que una base de datos es en principio un conjunto de tablas que tienen y mantienen relaciones entre s. La segunda etapa consiste en construir la aplicacin o aplicaciones que ya tendrn acceso o podrn manipular los datos contenidos en la tabla, estas aplicaciones se escriben usando ya sea lenguajes clsicos de programacin como CPP, BASIC, PASCAL, COBOL, CBUILDER, DELPHI, JAVA, VBSCRIPT, PERL, JSCRIPT, CSHARP, etc. DISEO Y CREACIN DE UNA TABLA El primer paso antes de usar el paquete correspondiente a esta tarea, es disear la tabla completamente, esto exige: a) Nombre apropiado y determinacin de atributos y campos correspondientes. b) Seleccionar y determinar el atributo principal o campo clave o llave primaria que se utilizara como el identificador nico que permite diferenciar cada instancia o rengln diferente dentro de la tabla. c) Tambin se puede seleccionar otros campos que puedan servir ms adelante para ordenar de manera diferente la tabla, es decir una tabla en principio ya est ordenada por campo clave por ejemplo, la matricula de un alumno, el numero de empleado, etc., pero existirn muchas ocasiones, mas adelante donde se puede pedir un orden diferente, por ejemplo, por ciudad, por carrera, por nombre, por edad, etc., la buena ingeniera de una base de datos exige tomar en cuenta estos y otros muchos problemas y detalles. d) A estos atributos o campos especiales se les conoce como claves o llaves secundarias, que internamente generan otra tabla especial llamada tabla o archivo de ndices (tabla o archivo que contiene dos campos, el primero es la clave secundaria ordenada y el segundo la posicin o rengln donde se encuentra en la tabla original). e) Escribir restricciones y condiciones apropiadas para ciertos atributos, por ejemplo el nmero de empleado deben comenzar en 500, la edad no debe ser mayor de 150 aos, etc. Ya listo el diseo de la tabla, se usara el procedimiento correspondiente para su creacin y almacenamiento. Recordar adems que todo el trabajo ya sea directamente con la base de datos y la tabla o por medio de un programa se realizara usando SQL (lenguaje estructurado de consultas), as que todas las instrucciones raras que se analizan en el siguiente tema, estn construidas con SQL

UNICA - FIS

TEMA 5: MYSQL JAVA JSP En este ejercicio construiremos una base de datos llamada mibase que solo contendr una tabla llamada mitabla con campos clave, nombre, edad, estatura mismos que se estarn usando a lo largo de esta unidad a manera de ejemplo. Empezaremos por instalar el sevidor de mysql, bajarlo de www.mysql.org e intalarlo en el directorio de default (c:\mysql). Antes de empezar a usarlo, es conveniente notar que mysql incluye varios servidores distintos, en general los dos ms importantes es un servidor standalone para windows 98,me,2000,xp(mysqld.exe) y un servidor especializado para servicios nt(mysqldnt.exe), es decir para windows 2000,xp, El procedimiento a seguir para arrancar el servidor, crear los usuarios ROOT y usuario1, as como para crear y cargar nuestra base de datos y finalmente apagar el servidor es: 1.- Usando una sesin de DOS o command prompt, navegar hasta c:\mysql\bin ejemplo:

Aqu vienen los diferentes servidores MYSQL y algunas utileras de administracin del servidor, por favor no ejecuten ninguna de ellas sobre todo las de administracin porque entonces se instalara por default el servidor nt de mysql como un servicio ms de Windows. 2.-Arrancar el servidor con la orden: mysqld console Ejemplo:

UNICA - FIS

Ustedes tendrn una ventana un poco diferente, porque primero tendr que crear e inicializar unos default's del servidor mysql, pero al final de su pantalla debern estar los dos ltimos renglones de la pantalla que est arriba de ejemplo. 3.- EN OTRA SESIN o ventana del msdos o Command prompt volver a navegar hasta c:\mysql\bin 4.- Iniciar ahora una sesin tipo cliente con el servidor mysql dando la orden: mysql -uroot mysql Ejemplo:

El mysql> es el promt del servidor, es aqu donde se pueden mandar todos los comandos o instrucciones que tiene MYSQL. Y observar que todas las ordenes terminan con (;) o \g, por cierto para terminar la sesin usar \q; UN ELEMENTO IMPORTANTE A ENTENDER, es que arrancamos tanto el servidor como la sesin cliente usando el usuario principal ROOT y esta es una mala prctica de seguridad, el primer problema es que MYSQL para Windows tiene al usuario (-u)ROOT sin ningn PASSWORD, es por eso que se pudo arrancar tanto el servidor como el cliente. 4.- Crear un password para ROOT con la orden: mysql>set password for root@localhost=password('minuevopassword'); Ejemplo:

UNICA - FIS

Recordar que de ahora en adelante para parar el servidor (no el cliente que estamos usando) se deber incluir el password correspondiente. 5.- Crearemos ahora un usuario normal (NO ROOT), para que sea dicho usuario quien maneje su propia base de datos, este procedimiento se har con las siguientes dos rdenes: mysql> grant all privileges on *.* to usuario1@localhost identified by 'passwordusuario' with grant option; Ejemplo:

Observar que se ha creado ahora un usuario comn (lauro) con password laurosoto y el usuario principal ROOT tambin tiene el mismo password, por favor no usen ustedes el mismo password para los dos usuarios. 6.- Terminar la sesion del cliente ROOT con la orden: mysql> QUIT; Observar el bye y que desaparece el promt de mysql. 7.- Recordar que es diferente el servidor mysql (mysqld.exe) que se tiene andando en memoria y el cliente (mysql.exe) que se acaba de apagar. 8.- Si todava tienen una ventana msdos abierta ( si no la tienen abran otra sesion msdos y navegar a cd\mysql\bin) apagaremos el servidor MYSQLD con la orden: mysqladmin -uroot -plaurosoto shutdown Si abren la ventana que estaba minimizada observar que se par el servidor mysqld, Ejemplo
8

UNICA - FIS

Observar que para pararlo se tuvo que usar usuario -uROOT y password -plaurosoto 9.- ARRANCAR otra vez el servidor mysqld con la orden normal (paso 2) y minimizar su propia ventana. 10.-Ahora estableceremos una nueva sesin cliente, pero usando el usuario lauro, para crear la base de datos, las tablas de las bases, y cargar algunos renglones de pruebas en las tablas. 11.- ABRIR otra ventana msdos y dar la orden: mysql -unombreusuario -ppassword Esto con el fin de abrirnos una sesin de mysql, como lo muestra el siguiente ejemplo:

Con este paso ya estaremos dentro del prompt de mysql. (MYSQL>) 12.- El paso que sigue es mandar instrucciones sql apropiadas para crear nuestra base de datos, para este ejercicio usaremos la instruccin: create database mibase; >observar que todas las instrucciones de sql terminan con ;

UNICA - FIS

13.- Se uso adems la instruccin show databases; para ver cuntas bases de datos tenemos construidas en nuestro sitio observar que el sistema crea una default llamada test. 14.- El paso que sigue es seleccionar la base de datos a trabajar con la instruccin sql use mibase; Y luego construiremos nuestra primera tabla, llamada mitabla con la instruccion sql Create table mitabla ( clave mediumint auto_increment, nombre varchar(30), edad int, estatura float, primary key(clave) );

Los tipos de datos que pueden usar en mysql son: TINYINT, SMALLINT, MEDIUMINT, INT, INTEGER, BIGINT, REAL, DOUBLE, FLOAT, DECIMAL, NUMERIC, CHAR, VARCHAR, DATE, TIME, TIMESTAMP, DATETIME,
10

UNICA - FIS

TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT,ENUM(value1,value2,value3,), SET(value1,value2,value3,),MySQL Reference Manual (C) 2002 MySQL AB En cuanto a autoincrement se usa para que mysql vaya asignando la clave automticamente y primary key(clave) es para indicarle a mysql que clave es el campo llave o principal de la tabla . 15.- Ahora se cargan algunos renglones de prueba en la tabla con la instruccin sql(ya leyeron el tutorial de sql); mysql> insert into mitabla (nombre,edad,estatura) values( oso,10,1.67);

16.- agregar uno dos o tres renglones para pruebas a la tabla, para finalizar revisar como quedo cargada la tabla con la instruccin sql: mysql>select * from mitabla;

8.- Usar QUIT para terminar la sesin de mysql.

11

UNICA - FIS

TEMA 6: JDBC SQL RESULTSET JAVA JSP El problema es comunicar un programa o aplicacin con una base de datos y mas que comunicar se pretende que el programa o aplicacin realice una serie de procesos u operaciones con la base de datos o mejor aun con el conjunto de tablas que contiene una base de datos. El modo de comunicarse entre nuestro programa o aplicacin y la base de datos (ya sea fsica o un dbserver) implica que ambos manejen un lenguaje de programacin comn, es decir no se puede mandar una instruccin en csharp, o en basic o pascal a la base de datos y adems esperar que esta ultima la entienda ( para entender esto, una razn muy sencilla es que la base de datos tendra que conocer o comprender todos los lenguajes de programacin), para resolver este problema de comunicacin es que se usa un lenguaje comn de bases de datos que tanto los lenguajes de programacin existentes como las bases de datos entienden, este lenguaje comn de bases de datos es el SQL (structured query languaje) o lenguaje estructurado de consultas. Bueno las principales instrucciones de SQL que se usan en este curso son SELECT, INSERT, UPDATE y DELETE. La pregunta es ahora como mandamos las instrucciones sql a la base de datos, la respuesta son los siguientes OBJETOS. MYSQL CONNECTORJ.- Es un objeto(clase) especializado que se utiliza para enlazar e intercambiar informacion entre MYSQL y JAVA. Esta clase la debern de bajar de http://dev.mysql.com/downloads/connector/j/3.0.html Abrirlo con el winzip y solo buscar y sacar una clase que se llama MYSQLCONNECTOR-JAVA-3.0.11-STABLE-BIN.JAR Este archivo .jar ponerlo en su servidor lws en el direcorio C:\lws\common\lib Es muy importante que este paso lo realicen de la manera ms completa posible. OBJETO CONNECTION:- Objeto que se utiliza para establecer la conexin o enlace entre el programa jsp y la base de datos en mysql. OBJETO RESULTSET:- Es la representacin en memoria de las tablas de la base de datos en disco, se puede entender como una tabla virtual, recordar que generalmente todos los procesos que se realicen con la tabla (insertar registros, eliminar registros, etc.) se realizaran realmente contra un resulset y no provocaran ningn cambio en la tabla fsica en disco, resulset tiene un conjunto de mtodos muy tiles y muy usados para el proceso de los renglones de la tabla virtual. OBJETO STATEMENT:- Este objeto y sus dos mtodos executequery(solo para select de sql) y executeupdate( solo para insert, update y delete de sql) son los mtodos que se utilizaran para comunicarse con la tabla fsica en disco.

12

UNICA - FIS

Ejemplo:
// declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};

TEMA 7: JAVA JSP MYSQL CONSULTA O DESPLIEGUE O SELECCIN Existen una serie de operaciones y procesos que son muy comunes contra una tabla en una base de datos en disco, la ms comn es desplegar todos los renglones de la tabla que estn almacenados en disco, a este proceso le llamaremos SELECCIN, consulta o despliegue. Como se indico anteriormente la comunicacin con la base de datos se tendrn que dar usando el lenguaje especializado de bases de datos llamado SQL(structured query language), la instruccin sql que se usa para resolver este problema tiene el siguiente formato: SELECT [listacampos, * o ALL] FROM TABLA; El procedimiento que se intenta seguir cuando se construya un programa jsp que tenga que manipular una tabla en disco deber seguir los siguientes pasos: 1.- Crear una conexin o enlace a la base de datos. 2.- Abrir la conexin a la base de datos. 3.- Crear el enlace y cargarlo con la instruccin sql 4.- Crear el RESULTSET y cargarlo 5.- Cargar un objeto table de html con el RESULTSET 6.- Procesar el table de html 7.- Cerrar rsultset, statement, driver o coneccin

13

UNICA - FIS

prog41 jsp
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% // declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; if(request.getParameter("OK") != null) { // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; //leyendo tabla en disco y pasandola al resultset try { tabla = instruccion.executeQuery("select * from mitabla"); // mandando resultset a una tabla html out.println("<TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th></TR>"); // ciclo de lectura del resultset while(tabla.next()) { out.println("<TR>"); out.println("<TD>"+tabla.getString(1)+"</TD>"); out.println("<TD>"+tabla.getString(2)+"</TD>"); out.println("<TD>"+tabla.getString(3)+"</TD>"); out.println("<TD>"+tabla.getString(4)+"</TD>"); out.println("</TR>"); }; // fin while out.println("</TABLE></CENTER></DIV></HTML>"); // cerrando resultset tabla.close(); instruccion.close();canal.close();} //fin try no usar ; al final de dos o ms catchs catch(SQLException e) {}; }; // construyendo forma dinamica out.println("<FORM ACTION=prog41.jsp METHOD=post>"); out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=CONSULTA><BR>"); out.println("</FORM>"); %>

14

UNICA - FIS

Corrida:

Notas: 1.- revisar con cuidado el programa, porque como todo buen programa lleva incluida mucha documentacin o explicacin. 2.- Se sigue el procedimiento genrico para procesar tablas 3.- Observar y siempre incluir los import's indicados. 4.- Se empieza creando las variables globales a ocupar y abriendo la conexin a la base de datos, 5.- Se crea el enlace y se carga el resultset(o tabla en memoria) con la instruccin sql y la conexin, aqu es necesario entender que existen varias maneras de hacer este proceso. 6.- Luego se crea el resultset(tabla) y se cargo con toda la base de datos en disco 7.- Posteriormente se carga el TABLE DE HTML con el resultset. 8.- Para visitar o procesar todos los renglones de la tabla del dataset se usa un ciclo while, y el mtodo RESULTSET.NEXT() y por el nombre se ve que existen otros mtodos tiles para navegar por todos los renglones de resultset, tales como last(), prior() etc. 9.- Para procesar un dato, celda o columna de un rengln cualesquiera se usa el siguiente mtodo RESULTSET.GETSTRING(numerocolumna o nombrecolumna). 10.- ES MUY IMPORTANTE ESTUDIAR TODOS LOS MTODOS DEL RESULTSET PORQUE LES FACILITARA MUCHOS PROBLEMAS DE MANIPULACIN DE TABLAS, CONSULTAR LA DOCUMENTACIN DE SDK DE JAVA.

15

UNICA - FIS

11.- observar tambin que los objetos resultset, statement y drivermanager(conexin), deben cerrarse al final del programa, y se cierran en el mismo orden como fueron abiertos. 12- ms claro an, NO OLVIDAR USAR LOS TRES CLOSE() que puse en el programa ejemplo. TAREA JAVA JSP MYSQL 1.- construir y desplegar una primera base de datos que contenga la primera tabla que disearon en el tema de tablas. 2.- Construir una segunda base de datos que contenga cuando menos tres de las tablas ya diseadas y desplegar cualquiera de ellas usando una sola forma html, donde el usuario selecciona cual quiere desplegar.

TEMA 8: INSERCION O ADICION DE REGISTROS SQL INSERT JAVA JSP Insertar o agregar registros o renglones nuevos a una tabla en disco, es un proceso sencillo que usa la siguiente instruccin sql: INSERT INTO TABLA(CAMPO1,CAMPO2..) VALUES(VALOR1,VALOR2..); Prog42.jsp
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% if(request.getParameter("GRABAR") != null) { // objetos de enlace Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; //cargando los campos a grabar // excepto clave porque en mysql es de tipo auto-increment String nombre = request.getParameter("NOMBRE"); int edad = Integer.parseInt(request.getParameter("EDAD"));

float estatura =Float.parseFloat(request.getParameter("ESTATURA")); // insert into tabla(nombre,edad,estatura) values('juan', 15, 1.88); String q="insert into mitabla(nombre,edad,estatura) values(\"" +nombre+"\","+edad+","+estatura+"); "; try { // agregando renglon (insert) 16

UNICA - FIS

int n=instruccion.executeUpdate(q); //avisando que se hizo la instruccion out.println("REGISTRO INSERTADO"); } catch(SQLException e) {out.println(e);}; try{ // tabla.close(); instruccion.close(); canal.close(); } catch(SQLException e) {out.println(e);}; }; // construyendo forma dinamica out.println("<FORM ACTION=prog42.jsp METHOD=post>"); out.println("NOMBRE :<INPUT TYPE=TEXT NAME=NOMBRE><BR>"); out.println("EDAD :<INPUT TYPE=TEXT NAME=EDAD><BR>"); out.println("ESTATURA:<INPUT TYPE=TEXT NAME=ESTATURA><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=GRABAR VALUE=INSERTAR> <BR>"); out.println("</FORM>"); %>

Corrida:

Corrida prog41.jsp (consulta)

17

UNICA - FIS

El programa est bien documentado. Solo crear la string q con el formato apropiado sql( como se dijo al principio de este tema). OBSERVAR QUE STATEMENT: EXISTEN DOS METODOS PARA EL OBJETO

a) STATEMENT.EXECUTEQUERY() USARLO PARA SQL SELECT b) STATEMENT.EXECUTEUPDATE() USARLO PARA SQL INSERT, UPDATE, DELETE. TAREA JAVA JSP MYSQL 1.- construir muchos programas de insercin en las tablas de las bases de datos que tengan construidas TEMA 9: BUSQUEDA SQL SELECT JAVA JSP En este tema se analiza la bsqueda de un registro o rengln determinado en este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacin proporcionando un dato de bsqueda generalmente la clave del registro. La solucin es sencilla, solo usar otra vez la instruccion select, con el siguiente formato: SELECT [ *, all, campos] FROM TABLA WHERE clave=claveabuscar; Y RESULTSET.EXECUTEQUERY(). Prog43.jsp
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% // declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; if(request.getParameter("OK") != null) { // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};

18

UNICA - FIS
// preparando condicion de busqueda int clave = Integer.parseInt(request.getParameter("CLAVEB")); // construyendo select con condicion String q="select * from mitabla where clave="+clave; // mandando el sql a la base de datos try { tabla = instruccion.executeQuery(q); // mandando resultset a tabla html out.println("<TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th></TR>"); while(tabla.next()) { out.println("<TR>"); out.println("<TD>"+tabla.getString(1)+"</TD>"); out.println("<TD>"+tabla.getString(2)+"</TD>"); out.println("<TD>"+tabla.getString(3)+"</TD>"); out.println("</TR>"); }; // fin while out.println("</TABLE></CENTER></DIV></HTML>"); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {}; }; // construyendo forma dinamica out.println("<FORM ACTION=prog43.jsp METHOD=post>"); out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=BUSCAR><BR>"); out.println("</FORM>"); %>

nota: no hay nada nuevo es una combinacin de los dos programas anteriores con las mismas notas, solo se usa un input text para pedir la clave, aunque se puede usar cualquier campo para buscar. Tambin recordar que el resultset despus de la busqueda solo queda cargado con el rengln que el canal se trajo de la base de datos. Corrida:

Observar que aunque el resultset tenga cuatro campos se pueden desplegar solo los que se ocupen.
19

UNICA - FIS

TAREAS PROGRAMACION JAVA JSP 1.- hacer programas de busquedas para las bases y tablas que tengan TEMA 10: FILTROS JAVA JSP Otro problema similar al anterior es el de filtros es decir en muchas ocasiones es necesario obtener informacin acerca de un subconjunto de renglones de la tabla. Por ejemplo todos los estudiantes que sean mayores de 17 aos, todos los clientes que sean de Tijuana, etc., a esto le llamamos filtros o condiciones. Tambien se resuelve de manera similar al anterior, es decir usando la instruccin select etc, from tabla, where CONDICIN; con RESULTSET.EXECUTEQUERY(). Prog44.jsp
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% // declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; if(request.getParameter("OK") != null) { // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; // preparando condicion de busqueda int edad = Integer.parseInt(request.getParameter("EDAD")); String q="select * from mitabla where edad >="+edad; // mandando el sql a la base de datos try { tabla = instruccion.executeQuery(q); // mandando resultset a tabla html out.println("<TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th></TR>"); while(tabla.next()) { out.println("<TR>"); out.println("<TD>"+tabla.getString(1)+"</TD>"); out.println("<TD>"+tabla.getString(2)+"</TD>"); out.println("<TD>"+tabla.getString(3)+"</TD>"); out.println("</TR>"); }; // fin while out.println("</TABLE></CENTER></DIV></HTML>"); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {}; };

20

UNICA - FIS
// construyendo forma dinamica out.println("<FORM ACTION=prog44.jsp METHOD=post>"); out.println("EDAD > =<INPUT TYPE=text NAME=EDAD><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=FILTRAR><BR>"); out.println("</FORM>"); %>

Nota: siguen siendo combinaciones de los programas anteriores pero sera prudente mejor usar dos combobox uno para la variable, otro para el operador relacional y un text para el dato y mandar estos tres datos al prog36.jsp pero eso queda de tarea. Corrida:

TAREAS PROGRAMACION JAVA JSP 1.- preparar programas de filtrado para sus bases de datos, recordar que sus formas html's deben construirlas con 2 combos y un text, suerte TEMA 11: OPERACIONES CON CAMPOS JAVA JSP Este es tambin un caso comn con elementos de una tabla, sin embargo es tambin fcil de resolver. Es necesario recordar primero algunas cosas elementales: 1.- Recordar que el numero de columna en una tabla empieza en 1, esto es que para realizar alguna operacin por ejemplo la columna edad del ejemplo que estamos siguiendo, su nmero de columna es la 2. 2.- La operacin que se plantee se puede realizar con todos los renglones de la tabla o con un solo rengln de la tabla(del resultset).

21

UNICA - FIS

3.- En el ejemplo se realiza la operacin con todos los renglones de la tabla y no olvidar que se tiene que usar la instruccion sql Update para que la nueva informacin se actualice en disco, recordar que los cambios que se hacen a una tabla es realmente al resultset, que a su vez es una tabla o base de datos en la memoria de la maquina del cliente o usuario es por esta RAZN QUE LOS cambios hay que actualizarlos o pasarlos con UPDATE a la base de datos en disco. El siguiente programa le aumenta 50 a todas las edades. Prog45.jsp
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% if(request.getParameter("OK") != null) { // declarando y creando objetos y variables int edad, clave; String q; Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; // crando canal o enlace try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; // cargando el resultet try { tabla = instruccion.executeQuery("select * from mitabla"); } catch(SQLException e) {}; // operaciones en el resultset while(tabla.next()){ clave = tabla.getInt(1); edad =tabla.getInt(3); edad=edad+50; // actualizacion a la tabla en disco con update q="update mitabla set edad= "+edad+ " where clave = "+clave+";"; try{ instruccion.executeUpdate(q); // cargando nuevo resultset actualizado tabla = instruccion.executeQuery("select * from mitabla"); // dejando apuntador en renglon apropiado, recordar que volvimos a releer la tabla y por tanto // hay que poner el apuntador en el renglon apropiado tabla.absolute(clave); }catch(SQLException e) {}; };//fin while // cerrando todo try {canal.close();instruccion.close();tabla.close();} catch(SQLException e) {}; out.println("EDADES AUMENTADAS"); }; // construyendo forma dinamica out.println("<FORM ACTION=prog45.jsp METHOD=post>");

22

UNICA - FIS

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=EDAD+50><BR>"); out.println("</FORM>"); %>

Nota: programa autoanotado.

TEMA 12: BAJA O ELIMINACIN SQL DELETE Eliminacin es otro proceso simple y comn con las bases de datos el modelo que estamos usando hace este tipo de operaciones muy fciles: La instruccin sql a usar es: DELETE FROM TABLA WHERE CONDICION Y RESULTSET.EXECUTEUPDATE() Prog46.jsp
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% // declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; if(request.getParameter("OK") != null) { // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

23

UNICA - FIS
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; // preparando condicion de eliminacion int clave = Integer.parseInt(request.getParameter("CLAVEB")); // construyendo select con condicion eliminacion SQL DELETE String q="delete from mitabla where clave = "+clave; // mandando SQL a tabla en disco try { instruccion.executeUpdate(q); // avisando out.println("registro eliminado"); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {} catch(java.lang.NullPointerException e){}; try { // no ocupa cerrar tabla(), no se leyo (select) un resultset // la eliminacion fue directa en disco instruccion.close();canal.close();} catch(SQLException e) {}; }; // construyendo forma dinamica out.println("<FORM ACTION=prog46.jsp METHOD=post>"); out.println("CLAVE ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=ELIMINAR><BR>"); out.println("</FORM>"); %>

Corridas : Prog -tabla original

24

UNICA - FIS

pro46.jsp

prog41.jsp

TAREAS PROGRAMACIN JAVA JSP 1.- construir este proceso para las tablas y bases de datos que tengan construidas. TEMA 13: EDICION DE REGISTROS SQL UPDATE Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacin o para corregir algn error de captura original o para agregar alguna columna que no exista por modificacin de la tabla o la base de datos. En general se tiene otro problema de sql UPDATE, sin embargo ahora se tendrn que construir dos mtodos uno de busqueda normal y otro de actualizacin estos mtodos son: 1.- BSQUEDA: programa normal de bsqueda por clave, pero ahora deber construir una forma.html dinmica, que contendr un form action apuntando o

25

UNICA - FIS

ejecutndose a s mismo es decir prog47.jsp, adems tendr todos los input text necesarios para cargar cada celda del renglon de busqueda. 2.- EDICIN: recoje los datos ya modificados de la forma.html dinamica y realiza directamente un sql update en la base de datos. prog47.jsp
<%@ page import="java.io.*, java.util.*, java.net.*, java.sql.*" %> <%! int clave=0; %> <% // codigo del evento BUSQUEDA y recordar construir una nueva forma dinamica if(request.getParameter("BUSCAR") != null) { Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; clave = Integer.parseInt(request.getParameter("CLAVEB")); String q="select * from mitabla where clave="+clave; try { tabla = instruccion.executeQuery(q); tabla.next(); out.println("<FORM ACTION=prog47.jsp METHOD=POST>"); out.println("NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE VALUE= "+ tabla.getString(2)+ "><BR>"); out.println("EDAD:<INPUT TYPE=TEXT NAME=EDAD VALUE= "+ tabla.getString(3)+ "><BR>"); out.println("ESTATURA:<INPUT TYPE=TEXT NAME=ESTATURA VALUE= "+ tabla.getString(4)+ "><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=EDITAR VALUE=EDITAR><BR>"); tabla.close();instruccion.close();canal.close(); } catch(SQLException e) {} catch(Exception ex){}; }; // fin evento buscar // codigo de evento EDICION String temp2=request.getParameter("EDITAR"); if(temp2==null)temp2=" "; if(temp2.compareTo("EDITAR")==0) { String nombre,q ; int edad; float estatura; Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

26

UNICA - FIS
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; try { tabla = instruccion.executeQuery("select * from mitabla"); } catch(SQLException e) {}; nombre = request.getParameter("NOMBRE"); edad = Integer.parseInt(request.getParameter("EDAD")); estatura = Float.parseFloat(request.getParameter("ESTATURA")); q = "UPDATE mitabla SET "+ "NOMBRE='"+ nombre+ "', EDAD="+ edad+",estatura="+estatura+" WHERE clave=" + clave+";"; try{instruccion.executeUpdate(q); }catch(SQLException e) {}; try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {}; out.println("REGISTRO EDITADO"); }; // fin evento editar // construyendo forma dinamica out.println("<FORM ACTION=prog47.jsp METHOD=post>"); out.println("CLAVE EDITAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=BUSCAR ><BR>"); out.println("</FORM>"); %>

Veamos la corrida completa: (tabla original)

Forma dinmica que construye prog47.jsp

27

UNICA - FIS

Continua prog47.jsp

Nueva tabla

28

UNICA - FIS

TAREAS PROGRAMACION JAVA JSP Construir programas de edicin para sus tablas y bases de datos TEMA 14: GRFICOS JAVA JSP Campos de grficos o de imgenes, se han convertido en elementos importantes de cualquier base de datos. Para manejar este elemento con java jsp existen dos maneras: 1.- Agregar un campo BLOB a la tabla en MYSQL y usar componentes especializados en imgenes tanto para subirlas como para desplegar la imagen. Este mtodo provoca que la base de datos crezca mucho recordar que una imagen aun de tipo jpg ocupa mucho espacio. 2.- El segundo mtodo es ms sencillo, primero subir las imgenes ( de preferencia jpg) con un ftp normal a tusitio y despues usar el tag <img src> de html y ademas agregar un campo de texto llamado fotourl o foto a la tabla en access y grabar la direccion http de la imagen en este campo, por ejemplo http:/javalex.com/tusitio/pato.jpg Despus solo cargar este tag imageurl en la pagina que se construir que no es otra cosa que el programa de bsqueda con el despliegue del campo extra, como lo muestra el programa ejemplo.

29

UNICA - FIS

Prog48.jsp
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% // declarando y creando objetos globales Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String strcon = "jdbc:mysql://localhost/mibase?user=lauro&password=laurosoto"; if(request.getParameter("OK") != null) { // abriendo canal o enlace en su propio try-catch try { Class.forName("com.mysql.jdbc.Driver").newInstance(); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {}; // preparando condicion de busqueda int clave = Integer.parseInt(request.getParameter("CLAVEB")); // construyendo select con condicion String q="select * from mitabla where clave="+clave; // mandando el sql a la base de datos try { tabla = instruccion.executeQuery(q); // mandando resultset a tabla html out.println("<TABLE Border=10 CellPadding=5><TR>"); out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th></TR>"); while(tabla.next()) { out.println("<TR>"); out.println("<TD>"+tabla.getString(1)+"</TD>"); out.println("<TD>"+tabla.getString(2)+"</TD>"); out.println("<TD>"+tabla.getString(3)+"</TD>"); out.println("<TD><img src=http:\\\\localhost\\progs\\"+tabla.getString(5)+"></TD>"); out.println("</TR>"); }; // fin while out.println("</TABLE></CENTER></DIV></HTML>"); tabla.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; try {canal.close();} catch(SQLException e) {}; }; // construyendo forma dinamica out.println("<FORM ACTION=prog48.jsp METHOD=post>"); out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>"); out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=BUSCAR><BR>"); out.println("</FORM>"); %>

30

UNICA - FIS

Corrida:

JAVA JSP PROYECTO CONSTRUIR UN SISTEMA INFORMACIN MYSQL COMPLETO INTEGRADO CON TODAS LAS OPERACIONES USANDO AL MENOS DOS TABLAS.

31

También podría gustarte