Java Jsp Int a Las Bases de Datos1

39
UNICA - FIS JAVA JSP INT A LAS BASES DE DATOS TEMA 1: JAVA JSP INTRODUCCIÓN En este capítulo 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 resolvía en la antigüedad 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 ejecución o corrida del programa. Tradicionalmente en programación antigua, este segundo problema se resolvía usando el concepto de archivos, que son medios permanentes de almacenamiento de datos en dispositivos o periféricos apropiados generalmente disco, cinta magnética, etc. TEMA 2: JAVA JSP MODELOS DE ALMACENAMIENTO DE DATOS En general existen dos modelos de almacenamiento de datos en los sistemas de información. 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. También se pueden definir como representaciones simbólicas y programáticas de entidades lógicas de información ejemplos de variables registros son alumnos, empleados, clientes, proveedores, productos, autos, etc. Estas variables registros también 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 1

Transcript of Java Jsp Int a Las Bases de Datos1

UNICA - FIS

JAVA JSP INT A LAS BASES DE DATOS

TEMA 1: JAVA JSP INTRODUCCIÓN

En este capítulo 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 resolvía en la antigüedad 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 ejecución o corrida del programa.

Tradicionalmente en programación antigua, este segundo problema se resolvía usando el concepto de archivos, que son medios permanentes de almacenamiento de datos en dispositivos o periféricos apropiados generalmente disco, cinta magnética, etc.

TEMA 2: JAVA JSP MODELOS DE ALMACENAMIENTO DE DATOS

En general existen dos modelos de almacenamiento de datos en los sistemas de información.

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.

También se pueden definir como representaciones simbólicas y programáticas de entidades lógicas de información ejemplos de variables registros son alumnos, empleados, clientes, proveedores, productos, autos, etc.

Estas variables registros también 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 aplicación que es un programa que se encarga de coordinar todos los programas descritos y presentar a usuarios de manera clara, fácil, accesible y entendible.

1

UNICA - FIS

Salta a la vista que construir un sistema de información por ejemplo para una tienda de vídeo o para un refaccionario etcétera, involucra un gran cantidad de trabajo de programación puesto que hay que programar muchas variables registros, muchos archivos en disco y construir una o muchas aplicaciones.

Este modelo se usa todavía en la actualidad pero es obvio que mejores maneras, más rápidas, 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 Relaciónales: este modelo intenta simplificar la construcción de sistemas de información como los antes descritos, este modelo solo incluye en forma simple los siguientes elementos:

b.1) Tablas, es una combinación 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 automáticamente se convertirá en un espejo de la tabla en memoria es decir, cuando se cargan los datos en la tabla en memoria también se estarán cargando en disco.

Otra vez cuando el programador escribe código para capturar los datos y mandarlos a la tabla en pantalla-memoria, realmente también lo está haciendo para darlos de alta en disco.

b.2) Aplicación, que tiene la misma función que en el modelo anterior.

Como se observa en este modelo es más sencillo construir sistemas de información puesto que la parte programática se reduce ampliamente.

TEMA 3: JAVA JSP MYSQL TABLAS

Una Tabla simple, representa una unidad de información de una entidad física o lógica de información:

Ej.

Tabla Empleado:

Clave Empleado Nombre Empleado Dirección Empleado Edad Empleado Teléfono Empleado etc. Empleado

2

UNICA - FIS

Tabla Proveedorr:

Clave Proveedor Nombre Proveedor Empresa Proveedor Teléfono 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 numérica.

Todos los elementos de la tabla solo hacen referencia hacia el mismo ente o sujeto de información.

Cada elemento solo representa o debe contener un solo dato de información.

No se respetan o siguen al pie de la letra estos tres postulados y empiezan los problemas al tiempo de programación.

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

Tabla: Camisas

NUMCAMISA MARCA ESTILO MEDIDA COLOR MATERIAL1 JEANS SPORT GRANDE AZUL ALGODON2 VOLIS VESTIR MEDIANA NEGRA POLIESTER3 GENERICA CAMISETA LARGA MORADO RARON

Tabla: Clientes

NUMCLIENTE NOMCLIENTE DIRCLIENTE TELCLIENTE1 JUAN PEREZ AV ABA 2233 23456782 LUIS SANCHEZ CALLE ZETA 3434 45678993 ROSA MARES CALLEJON NORTE 567890

3

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 información solo se presenta una instancia o renglón de una entidad lógica, entonces no es tabla, es un encabezado.

TAREAS PROGRAMACIÓN 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.- MERCANCÍAS

5.- PELÍCULAS

6.- MEDICINAS

7.- MAESTROS

8.- MATERIAS

9.- COMPUTADORAS

10.- BANCOS

TEMA 4: JAVA JSP TABLAS

El trabajo correcto con bases de datos relaciónales se divide en dos grandes pasos o etapas bien diferenciadas entre sí:

En la primera etapa se diseña la tabla con sus campos, llaves y condiciones especiales, luego se usa un paquete o programa de software especializado en la construcción, mantenimiento y administración de la base de datos, este software se usa para convertir la tabla o tablas ya bien diseñadas en un archivo en disco.

Existe software especializado en bases de datos, los llamados servidores de bases de datos, los tres más 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 algún lugar cercano o lejano en una red chica, mediana o grande.

Otros paquetes o software más pequeños y comunes también reciben el nombre de DBMS(DATA BASE MANAGEMENT SYSTEM) o sistemas administradores de bases de datos.

Este tipo de software se especializa en la creación, mantenimiento, seguridad, privacidad, etc. de un conjunto de tablas o mejor dicho una base de datos, DBMS comunes son access, postgres, fox, clipper, etc.

4

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 aplicación o aplicaciones que ya tendrán acceso o podrán manipular los datos contenidos en la tabla, estas aplicaciones se escriben usando ya sea lenguajes clásicos de programación como CPP, BASIC, PASCAL, COBOL, CBUILDER, DELPHI, JAVA, VBSCRIPT, PERL, JSCRIPT, CSHARP, etc.

DISEÑO Y CREACIÓN DE UNA TABLA

El primer paso antes de usar el paquete correspondiente a esta tarea, es diseñar la tabla completamente, esto exige:

a) Nombre apropiado y determinación 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 renglón diferente dentro de la tabla.

c) También se puede seleccionar otros campos que puedan servir más 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 existirán muchas ocasiones, mas adelante donde se puede pedir un orden diferente, por ejemplo, por ciudad, por carrera, por nombre, por edad, etc., la buena ingeniería 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 posición o renglón donde se encuentra en la tabla original).

e) Escribir restricciones y condiciones apropiadas para ciertos atributos, por ejemplo el número de empleado deben comenzar en 500, la edad no debe ser mayor de 150 años, etc.

Ya listo el diseño de la tabla, se usara el procedimiento correspondiente para su creación y almacenamiento.

Recordar además 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, están construidas con SQL

5

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 estarán 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 más importantes es un servidor standalone para windows 98,me,2000,xp(mysqld.exe) y un servidor especializado para servicios nt(mysqld-nt.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 sesión de DOS o command prompt, navegar hasta c:\mysql\bin ejemplo:

Aquí vienen los diferentes servidores MYSQL y algunas utilerías de administración del servidor, por favor no ejecuten ninguna de ellas sobre todo las de administración porque entonces se instalara por default el servidor nt de mysql como un servicio más de Windows.

2.-Arrancar el servidor con la orden:

mysqld –console Ejemplo:

6

UNICA - FIS

Ustedes tendrán una ventana un poco diferente, porque primero tendrá que crear e inicializar unos default's del servidor mysql, pero al final de su pantalla deberán estar los dos últimos renglones de la pantalla que está arriba de ejemplo.

3.- EN OTRA SESIÓN o ventana del msdos o Command prompt volver a navegar hasta c:\mysql\bin

4.- Iniciar ahora una sesión 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 sesión usar \q;

UN ELEMENTO IMPORTANTE A ENTENDER, es que arrancamos tanto el servidor como la sesión cliente usando el usuario principal ROOT y esta es una mala práctica de seguridad, el primer problema es que MYSQL para Windows tiene al usuario

(-u)ROOT sin ningún 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:

7

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 común (lauro) con password laurosoto y el usuario principal ROOT también 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 todavía 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 sesión 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 sesión 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 instrucción:

create database mibase;

–>observar que todas las instrucciones de sql terminan con ;

9

UNICA - FIS

13.- Se uso además la instrucción show databases; para ver cuántas 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 instrucción 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 automáticamente 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 instrucción 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 instrucción sql:

mysql>select * from mitabla;

8.- Usar QUIT para terminar la sesión de mysql.

 

11

UNICA - FIS

TEMA 6: JDBC SQL RESULTSET JAVA JSP

El problema es comunicar un programa o aplicación con una base de datos y mas que comunicar se pretende que el programa o aplicación 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 aplicación y la base de datos (ya sea física o un dbserver) implica que ambos manejen un lenguaje de programación común, es decir no se puede mandar una instrucción en csharp, o en basic o pascal a la base de datos y además esperar que esta ultima la entienda ( para entender esto, una razón muy sencilla es que la base de datos tendría que conocer o comprender todos los lenguajes de programación), para resolver este problema de comunicación es que se usa un lenguaje común de bases de datos que tanto los lenguajes de programación existentes como las bases de datos entienden, este lenguaje común 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 deberán 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 MYSQL-CONNECTOR-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 más completa posible.

OBJETO CONNECTION:- Objeto que se utiliza para establecer la conexión o enlace entre el programa jsp y la base de datos en mysql.

OBJETO RESULTSET:- Es la representación 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 ningún cambio en la tabla física en disco, resulset tiene un conjunto de métodos muy útiles y muy usados para el proceso de los renglones de la tabla virtual.

OBJETO STATEMENT:- Este objeto y sus dos métodos executequery(solo para select de sql) y executeupdate( solo para insert, update y delete de sql) son los métodos que se utilizaran para comunicarse con la tabla física 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-catchtry {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 SELECCIÓN

Existen una serie de operaciones y procesos que son muy comunes contra una tabla en una base de datos en disco, la más común es desplegar todos los renglones de la tabla que están almacenados en disco, a este proceso le llamaremos SELECCIÓN, consulta o despliegue.

Como se indico anteriormente la comunicación con la base de datos se tendrán que dar usando el lenguaje especializado de bases de datos llamado SQL(structured query language), la instrucción 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 conexión o enlace a la base de datos.

2.- Abrir la conexión a la base de datos.

3.- Crear el enlace y cargarlo con la instrucción 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 conección

13

UNICA - FIS

prog41 jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %><%// declarando y creando objetos globalesConnection 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-catchtry {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 resultsettry { tabla = instruccion.executeQuery("select * from mitabla");// mandando resultset a una tabla htmlout.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 resultsetwhile(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 whileout.println("</TABLE></CENTER></DIV></HTML>");// cerrando resultsettabla.close(); instruccion.close();canal.close();} //fin try no usar ; al final de dos o más catchscatch(SQLException e) {};};// construyendo forma dinamicaout.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 documentación o explicación. 2.- Se sigue el procedimiento genérico para procesar tablas 3.- Observar y siempre incluir los import's indicados. 4.- Se empieza creando las variables globales a ocupar y abriendo la conexión a la base de datos, 5.- Se crea el enlace y se carga el resultset(o tabla en memoria) con la instrucción sql y la conexión, 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 método RESULTSET.NEXT() y por el nombre se ve que existen otros métodos útiles para navegar por todos los renglones de resultset, tales como last(), prior() etc. 9.- Para procesar un dato, celda o columna de un renglón cualesquiera se usa el siguiente método RESULTSET.GETSTRING(numerocolumna o nombrecolumna). 10.- ES MUY IMPORTANTE ESTUDIAR TODOS LOS MÉTODOS DEL RESULTSET PORQUE LES FACILITARA MUCHOS PROBLEMAS DE MANIPULACIÓN DE TABLAS, CONSULTAR LA DOCUMENTACIÓN DE SDK DE JAVA.

15

UNICA - FIS

11.- observar también que los objetos resultset, statement y drivermanager(conexión), deben cerrarse al final del programa, y se cierran en el mismo orden como fueron abiertos. 12- más claro aún, 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 diseñaron en el tema de tablas. 2.- Construir una segunda base de datos que contenga cuando menos tres de las tablas ya diseñadas 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 instrucción 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 enlaceConnection 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-catchtry {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-incrementString 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 instruccionout.println("REGISTRO INSERTADO");} catch(SQLException e) {out.println(e);};try{// tabla.close();instruccion.close();canal.close();} catch(SQLException e) {out.println(e);};};// construyendo forma dinamicaout.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 EXISTEN DOS METODOS PARA EL OBJETO STATEMENT:

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 inserción en las tablas de las bases de datos que tengan construidas

TEMA 9: BUSQUEDA SQL SELECT JAVA JSP

En este tema se analiza la búsqueda de un registro o renglón determinado en este proceso el usuario del programa quiere que se despliegue un y solo un registro de información proporcionando un dato de búsqueda generalmente la clave del registro.

La solución 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 globalesConnection 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-catchtry {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 busquedaint clave = Integer.parseInt(request.getParameter("CLAVEB"));// construyendo select con condicionString q="select * from mitabla where clave="+clave;// mandando el sql a la base de datostry { tabla = instruccion.executeQuery(q);// mandando resultset a tabla htmlout.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 whileout.println("</TABLE></CENTER></DIV></HTML>");} //fin try no usar ; al final de dos o mas catchscatch(SQLException e) {};try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {};};// construyendo forma dinamicaout.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 combinación 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.

También recordar que el resultset después de la busqueda solo queda cargado con el renglón 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 información acerca de un subconjunto de renglones de la tabla.

Por ejemplo todos los estudiantes que sean mayores de 17 años, 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 instrucción select etc, from tabla, where CONDICIÓN; con RESULTSET.EXECUTEQUERY().

Prog44.jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %><%// declarando y creando objetos globalesConnection 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-catchtry {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 busquedaint edad = Integer.parseInt(request.getParameter("EDAD"));String q="select * from mitabla where edad >="+edad;// mandando el sql a la base de datostry { tabla = instruccion.executeQuery(q);// mandando resultset a tabla htmlout.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 whileout.println("</TABLE></CENTER></DIV></HTML>");} //fin try no usar ; al final de dos o mas catchscatch(SQLException e) {};try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {};};

20

UNICA - FIS

// construyendo forma dinamicaout.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 sería 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 también un caso común con elementos de una tabla, sin embargo es también fácil 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 operación por ejemplo la columna edad del ejemplo que estamos siguiendo, su número de columna es la 2.

2.- La operación que se plantee se puede realizar con todos los renglones de la tabla o con un solo renglón de la tabla(del resultset).

21

UNICA - FIS

3.- En el ejemplo se realiza la operación con todos los renglones de la tabla y no olvidar que se tiene que usar la instruccion sql Update para que la nueva información 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 RAZÓN 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 variablesint 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 enlacetry {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 resultettry {tabla = instruccion.executeQuery("select * from mitabla");} catch(SQLException e) {};// operaciones en el resultsetwhile(tabla.next()){clave = tabla.getInt(1);edad =tabla.getInt(3);edad=edad+50;// actualizacion a la tabla en disco con updateq="update mitabla set edad= "+edad+ " where clave = "+clave+";";try{instruccion.executeUpdate(q);// cargando nuevo resultset actualizadotabla = 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 apropiadotabla.absolute(clave);}catch(SQLException e) {}; };//fin while// cerrando todotry {canal.close();instruccion.close();tabla.close();} catch(SQLException e) {};out.println("EDADES AUMENTADAS");};// construyendo forma dinamicaout.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 ELIMINACIÓN SQL DELETE

Eliminación es otro proceso simple y común con las bases de datos el modelo que estamos usando hace este tipo de operaciones muy fáciles:

La instrucción 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 globalesConnection 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-catchtry {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 eliminacionint clave = Integer.parseInt(request.getParameter("CLAVEB"));// construyendo select con condicion eliminacion SQL DELETEString q="delete from mitabla where clave = "+clave;// mandando SQL a tabla en discotry { instruccion.executeUpdate(q);// avisandoout.println("registro eliminado");} //fin try no usar ; al final de dos o mas catchscatch(SQLException e) {}catch(java.lang.NullPointerException e){};try {// no ocupa cerrar tabla(), no se leyo (select) un resultset// la eliminacion fue directa en discoinstruccion.close();canal.close();} catch(SQLException e) {};};// construyendo forma dinamicaout.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 PROGRAMACIÓN 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 información o para corregir algún error de captura original o para agregar alguna columna que no existía por modificación de la tabla o la base de datos.

En general se tiene otro problema de sql UPDATE, sin embargo ahora se tendrán que construir dos métodos uno de busqueda normal y otro de actualización estos métodos son:

1.- BÚSQUEDA: programa normal de búsqueda por clave, pero ahora deberá construir una forma.html dinámica, que contendrá un form action apuntando o

25

UNICA - FIS

ejecutándose a sí mismo es decir prog47.jsp, además tendrá todos los input text necesarios para cargar cada celda del renglon de busqueda.

2.- EDICIÓN: 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 dinamicaif(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 EDICIONString 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 dinamicaout.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 dinámica que construye prog47.jsp

27

UNICA - FIS

TAREAS PROGRAMACION JAVA JSP

Construir programas de edición para sus tablas y bases de datos

TEMA 14: GRÁFICOS JAVA JSP

Campos de gráficos o de imágenes, 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 imágenes tanto para subirlas como para desplegar la imagen.

Este método provoca que la base de datos crezca mucho recordar que una imagen aun de tipo jpg ocupa mucho espacio.

2.- El segundo método es más sencillo, primero subir las imágenes ( 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

Después solo cargar este tag imageurl en la pagina que se construirá que no es otra cosa que el programa de búsqueda 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 globalesConnection 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-catchtry {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 busquedaint clave = Integer.parseInt(request.getParameter("CLAVEB"));// construyendo select con condicionString q="select * from mitabla where clave="+clave;// mandando el sql a la base de datostry { tabla = instruccion.executeQuery(q);// mandando resultset a tabla htmlout.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 whileout.println("</TABLE></CENTER></DIV></HTML>");tabla.close(); } //fin try no usar ; al final de dos o mas catchscatch(SQLException e) {};try {canal.close();} catch(SQLException e) {};};// construyendo forma dinamicaout.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 INFORMACIÓN MYSQL COMPLETO INTEGRADO CON TODAS LAS OPERACIONES USANDO AL MENOS DOS TABLAS.

31