Tutorial JSP

124
UNIDAD 1: JAVA JSP ELEMENTOS BASICOS TEMA 9: APLICACIONES JAVA JSP Recordar que JAVA es un lenguaje de programación moderno, que esta enfocado a la construcción de sistemas de informacion que se ejecutarán en una plataforma muy diversa de procesadores y sistemas operativos. Esto indica la necesidad de construir diversos tipos de aplicaciones, programas o sistemas en general existen los sguientes tipos de aplicaciones basicas: 1.- Aplicaciones o programas que se ejecuten en “consolas”, es decir ambientes del tipo msdos, linux, terminales tontas, etc. 2.-Aplicaciones o sistemas que se ejecuten en ambientes graficos o de tipo “ventanas:, ejemplo windows, kde o gnome de linux, sistem 8 de apple, etc. 3.- Aplicaciones de tipo APPLETS, que tambien son programas en java que se mandan a una pc remota o lejana, donde esa pc se encarga de correrla o ejecutarla o compilarla y correrla. Este applet lo manda un servidor de paginas(web server) junto con la pagina correspondiente, cada vez que un usuario se conecta al web server y requiere la pagina que contiene el applet. Para el caso de applets estos se ejecutan no en consola tampoco en una ventana sino dentro de el browser de la maquina remota que puede ser el internet explorer de microsoft o el netscape. Por supuesto que el browser del cliente debe estar preparado para ejecutar applets, esto se hace teniendo constantemente actualizado el browser (internet explorer o netscape) y estando sobre todo seguro que en la actualización del browser se incluya la maquina virtual de java.

Transcript of Tutorial JSP

Page 1: Tutorial JSP

UNIDAD 1: JAVA JSP ELEMENTOS BASICOS

TEMA 9: APLICACIONES JAVA JSP

Recordar que JAVA es un lenguaje de programación moderno, que esta enfocado a la construcción de sistemas de informacion que se ejecutarán en una plataforma muy diversa de procesadores y sistemas operativos.

Esto indica la necesidad de construir diversos tipos de aplicaciones, programas o sistemas en general existen los sguientes tipos de aplicaciones basicas:

1.- Aplicaciones o programas que se ejecuten en “consolas”, es decir ambientes del tipo msdos, linux, terminales tontas, etc.

2.-Aplicaciones o sistemas que se ejecuten en ambientes graficos o de tipo “ventanas:, ejemplo windows, kde o gnome de linux, sistem 8 de apple, etc.

3.- Aplicaciones de tipo APPLETS, que tambien son programas en java que se mandan a una pc remota o lejana, donde esa pc se encarga de correrla o ejecutarla o compilarla y correrla.

Este applet lo manda un servidor de paginas(web server) junto con la pagina correspondiente, cada vez que un usuario se conecta al web server y requiere la pagina que contiene el applet.

Para el caso de applets estos se ejecutan no en consola tampoco en una ventana sino dentro de el browser de la maquina remota que puede ser el internet explorer de microsoft o el netscape.

Por supuesto que el browser del cliente debe estar preparado para ejecutar applets, esto se hace teniendo constantemente actualizado el browser (internet explorer o netscape) y estando sobre todo seguro que en la actualización del browser se incluya la maquina virtual de java.

4.-Aplicacion de tipo SERVLETS, que son programas en java que se ejecutan direcatemente en el servidor de paginas o web server, que al ser invocado o llamado por una pc remota, el web server compila y ejecuta el servlet, ya ejecutado se mandan generalmente los resultados a la maquina remota, estos resultados se mandan en forma de una pagina html, para que la maquina remota los vea en su propio browser.

Una vez que el web server o servidor de paginas ejecuta un servlet, lo mantiene vivo o despierto, para responder de manera mas rapida a las peticiones siguientes que se hagan del servlet.

5.- Aplicaciones JSP (Java Server Pages), tecnologia que combina codigo html y codigo java en un solo programa o aplicación, cuando al web server le piden un jsp, lo compila, lo convierte a servlet con todas las implicaciones que se mencionarón en el inciso anterior y manda los resultados a la pc remota que lo solicitó.

Page 2: Tutorial JSP

6.- Beans y Java Beans, tecnologias de tipo servlet pero que estan especializadas principalmente en mantener enlaces constantes a bases de datos de cualquier marca (access, oracle, mysql, etc), esto permite que una serie de varios programas o aplicaciones a la vez esten interactuando con el mismo java bean y por consiguiente con la base de datos.

7.-Existen otra serie de aplicaciones diferentes que se pueden construir con java, tales como aplicaciones rmi, aplicaciones en tiempo real, ejb , pero de momento estan fuera del alcance de estas notas.(estarse pendiente de la siguiente actualizacion de este texto)

En general todas las aplicaciones que se pueden desarrollar ( consola, graficas, applets y servlets, jsp, beans ) todas tienen en comun el lenguaje e instrucciones de programacion de java.

Sin embargo para propositos de este curso nos especializaremos en JSP (JAVA SERVER PAGES), en virtud de que actualmente es una de las tecnologias mas utiles para la construcción de programas, apliacciones y sistemas de información modernos.

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA

TEMA 6: JAVA JSP INSTRUCCIÓN IF

Es la instrucción condicional mas usada en los diversos lenguajes de programación, su formato completo y de trabajo en java jsp es:

cargar o asignar la variable de condición;

if (condición)

{ grupo cierto de instrucciones;}

else

{ grupo falso de instrucciones; };

Primus.- Observar donde van y donde no van los puntos y comas;

Secundus.- La condición va entre paréntesis ;

Tertius.- Si un if no ocupa un grupo falso de instrucciones entonces no se pone el else, y la llave antes del else si terminaría con punto y coma.

Ejemplo:

Prog2 jsp

<%

Page 3: Tutorial JSP

// declarando

int sueldo=0;String res="";

if(request.getParameter("OK") != null)

{

sueldo = Integer.parseInt(request.getParameter("SUELDO"));

if (sueldo >= 3000)

{ res="RICO"; }

else {res="POBRE"; };

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog2.jsp METHOD=post>");

out.println("DAME SUELDO:<INPUT TYPE=TEXT NAME=SUELDO value="+sueldo+"><BR>");

out.println("EVALUACION:<INPUT TYPE=TEXT NAME=RES value="+res+"><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

Para ejecutarlos subirlos a tu sitio en programaciónfacil y pedirlo desde ahí con la dirección http://programacionfacil.com/tusitio/prog4.html

Corrida prog2 jsp

Page 4: Tutorial JSP

Recordar que es valido usar mas de una instrucción dentro del grupo cierto o falso del if.

Recorar ademas que para el caso de strings usar:

if ( carrera.compareTo(“informatica”) == 0 )

TAREAS PROGRAMACION JAVA JSP

1.- Capturar un numero cualesquiera e informar si es o no es mayor de 100.

2.- Capturar un numero entero cualesquiera e informar si es o no es múltiplo de 4 ( recordar el operador mod(%), analizado en el tema de operadores aritméticos).

3.- Capturar los cinco datos mas importantes de un Empleado, incluyendo el sueldo diario y los días trabajados desplegarle su cheque semanal solo si ganó mas de $500.00 en la semana, en caso contrario desplegarle un bono de despensa semanal de $150.00.

4.- Capturar los datos mas importantes de un estudiante incluyendo tres calificaciones construir una boleta de calificaciones en una pagina de respuesta bien bonita si el estudiante es de la carrera de medicina, en caso contrario construir una pagina mas bonita todavia que despliega un oficio citando a los padres del estudiante a una platica amistosa con los maestros de la escuela.

5.- Capturar los datos mas importantes de una mercancia cualesquiera, incluyendo cantidad, precio, etc. desplegar una orden de compra, solo si el producto es de origen nacional, en caso contrario no hacer nada.

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA

TEMA 8: JAVA JSP INSTRUCCIÓN SWITCH

Page 5: Tutorial JSP

También existen ocasiones o programas donde se exige evaluar muchas condiciones a la vez, en estos casos o se usa una condición compuesta muy grande o se debe intentar convertir el problema a uno que se pueda resolver usando la instrucción SWITCH.

Esta instrucción es una instrucción de decisión múltiple donde el compilador prueba o busca el valor contenido en una variable ENTERA o CHARACTER contra una lista de constantes apropiadas, es decir enteras, character, cuando el computador encuentra el valor de igualdad entre variable y constante entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra el valor de igualdad entre variable y constante, entonces ejecuta un grupo de instrucciones asociados a un default, aunque este ultimo es opcional.

El formato de esta instrucción es el siguiente;

capturar o asignar variable de condición;

switch(var OPCION)

{

case const1: instrucción(es);

break;

case const2: instrucción(es);

break;

case const3: instrucción(es);

break; ………………

default: instrucción(es);

};

prog3 jsp

<%

// declarando

char letra=' ';

if(request.getParameter("OK") != null)

{

//recordar que TEXTBOX contiene una string

letra=request.getParameter("LETRA").charAt(0);

Page 6: Tutorial JSP

switch(letra)

{case 'a':

out.println("aguila ");

break;

case 'b': case 'B':

out.println("baca ");

break;

case 'c':

out.println("caballo ");

break;

default:

out.println("no hay ");

};

// observar que se puede escribir direcatmente a la pagina dinamica

// esto es para los flojos

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog3.jsp METHOD=post>");

out.println("DAME UNA LETRA:<INPUT TYPE=TEXT NAME=LETRA value="+letra+"><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

corrida:

Page 7: Tutorial JSP

Observar el caso “b”, observar como se pueden usar mas de dos case con un solo break sorry por lo de BACA pero el unico animalito que me acorde fue el BURRO y luego mis alumnos se sienten aludidos y ofendidos.

TAREAS PROGRAMACION JAVA JSP

1.- Construir un programa que capture un deporte cualesquiera y despliegue dos implementos deportivos apropiados.

2.- Evaluar cualquier función vista para cuando x =3,-4, 5

UNIDAD 2: JAVA JSP CONTROL DE PROGRAMA

TEMA 10: JAVA JSP CHECKBOX Y EXCEPCIONES

El componente CheckBox , permite seleccionar una opción al usuario del programa o tomar una decisión directamente en pantalla.

Ejemplos de uso:

Page 8: Tutorial JSP

Observar que dos o mas checkboxs pueden estar seleccionados a la vez.

Codigo prog5 jsp

<%! String m,n,f; %>

<%

// observar declaracion y usando las otras directivas

if(request.getParameter("OK") != null)

{

m=request.getParameter("M");

n=request.getParameter("N");

f=request.getParameter("F");

try{

if (m.compareTo("on")==0) out.println("masculino checado<br>");

}catch(java.lang.NullPointerException e){};

try{

if (n.compareTo("on")==0) out.println("neutro checado<br>");

}catch(java.lang.NullPointerException e){};

try{

if (f.compareTo("on")==0) out.println("femenino checado<br>");

Page 9: Tutorial JSP

}catch(java.lang.NullPointerException e){};

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog5.jsp METHOD=post>");

out.println("<b>sexo:</b><br>");

out.println("<input type=checkbox name=M checked>masculino<br>");

out.println("<input type=checkbox name=F >femenino<br>");

out.println("<input type=checkbox name=N checked>neutro<br>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

Notas:

1.- grabarlo y subirlo como prog5 jsp a tusitio en programacionfacil.com

2.- La propiedad name debera ser diferente en cada checkbox usado, la propiedad checked se usa para que aparezca ya palomeado o seleccionado el control.

3.- Cuando se activa prog5 jsp, esta forma manda el par NAME=on solo de los checkbox que fuerón seleccionados.

Corrida:

Page 10: Tutorial JSP

Para programar este componente:

Como ya se indico, esta forma va a mandar el par NAME=on asi que esto es sencillo en java jsp, solo recordar usar un if por cada checkbox.

Muy sencillo el codigo de validación y no olvidar subirlo a tu sitio.

ERRORES Y EXCEPCIONES

Estos problemas de errores y excepciones que en java, se producen al tiempo de execución del programa son los problemas normales de mal codigo y que tambien se producen al tiempo de compilación no al tiempo de ejecucion del programa, este tema se refiere a eehhrorres y excepciones al tiempo de ejecución del programa.

Java tiene un mecanismo muy completo para el manejo de errores y excepciones, un ERROR ocurre generalmente al tiempo de estarse ejecutandose un programa, por ejemplo una division entre cero.

Una EXCEPCION es creada tambien al tiempo de ejecución del programa cuando en alguna parte del programa se produce alguna condición no contemplada en el programa para el programa ejemplo del checkbox, se crearon tres variables o mejor dicho tres objetos strings y cuando de la forma se manda solo una o dos de ellas cargadas con “on” algunas de las variables u objetos strings queda cargada con null(caso especial de strings) y al intentar hacer la comparación java avisa de una excepcion como se muestra en la siguiente pantalla ejemplo:

Page 11: Tutorial JSP

Esta excepción ocurrio al tiempo de ejecución del programa y por el problema ya descrito y explicado.

La diferencia entre una EXCEPCION y un ERROR es que una excepcion si es atrapada(catch) por el programa y el programador permite recuperar el programa y continuar con su ejecución, mientras que un error aunque sea atrapado(catch) por el programa y el programador el programa suspendera y terminara su ejecución.

Si errores o excepciones no son atrapadas(catch) el programa terminara su ejecución y mandara el aviso al usuario, como se demuestra en la pantallita de arriba.

Es por esta razón que es conveniente y necesario atrapar (catch) errores o excepciones, asi el programador podra incluir algun mecanismo de corrección de errores o al menos de avisarle al usuario en lugar de que sea el servidor quien le avise.

Este mecanismo de correccion de errores es la clausula o instruccion

Try{

Instrucciones normales de java;

} catch(tipo de error o excepcion var de error){ inst de aviso o correc de error puede incluir la var de error ; };

Un try-catch puede encerrar una instruccion de java, un grupo de instrucciones de java o todo el programa completo.

En el prog5 jsp se uso un try-catch en cada if, se pudo usar un try catch con todos los if's pero no se conoce de antemano cuales variables strings se quedan en null asi que fue mas conveniente revisar if por if.

En resumen cuando en algun programa al tiempo de ejecución les aparezca un error o excepcion van a ocupar usar try-catch para atraparlo o corregirlo, el tipo de error o excepcion a cubrir se los va a estar indicando el propio servidor de paginas como lo muestra la pantallita ejemplo de excepción y observar que la misma excepcion que aparecio en dicha pantallita, se puso en la clausula catch.

Page 12: Tutorial JSP

Si aparecen mas errores o excepciones en un programa es valido que un try lleve mas de un catch.

TAREAS PROGRAMACION JAVA JSP

1.- Evaluar la función para x = 2,-5, 8 (usar un CheckBox por cada valor de x, y programar cada el if de cada CheckBox con la operación correspondiente y el despliegue del resultado).

2.- Construir un pagina html con los datos de un automóvil y una segunda pagina muestra un plan de financiamiento a dos años y una tercera pagina muestra un plan de financiamiento a tres años.

3.- Construir un programa de seleccion de menús, las opciones seran algunos de los programas ya hechos.(se recomienda que en cada if construyan la forma o pagina de manera dinamica de la forma html que tienen en el programa correspondiente)

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA

TEMA 11: COMPONENTE RADIOBUTTON JAVA JSP

Se utiliza para presentar al usuario un conjunto de opciones mutuamente excluyentes entre si es decir si el usuario selecciona un componente radio todos los demás componentes radioButton en la forma, se deseleccionan solos es por esta razón que decimos que radiobotones son mutuamente excluyentes.

Codigo prog6 jsp

<%! String sexo, carrera; %>

<%

// es mejor esta declaracion no hay que inicializar

if(request.getParameter("OK") != null)

{

sexo=request.getParameter("SEXO");

carrera=request.getParameter("CARRERA");

out.println("carrera="+carrera+"<br>");

out.println("sexo="+sexo+"<br>");

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog6.jsp METHOD=post>");

out.println("sexo:<br>");

Page 13: Tutorial JSP

out.println("<input type=radio name=SEXO value=masculino checked>masculino<br>");

out.println("<input type=radio name=SEXO value=femenino>femenino<br>");

out.println("<input type=radio name=SEXO value=neutro>neutro<br>");

out.println("carrera:<br>");

out.println("<input type=radio name=CARRERA value=sistemas checked>sistemas<br>");

out.println("<input type=radio name=CARRERA value=informatica>informatica<br>");

out.println("<input type=radio name=CARRERA value=medicina>medicina<br>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

1.- Observar que tenemos dos grupos de radiobotones uno con NAME=SEXO y otro con NAME=CARRERA sin embargo existen varios radiobotones y cada radiobuton tiene su propio valor o VALUE.

2.- Recordar que en checkbox(tema anterior) la propiedad NAME debe ser distinta para cada uno de ellos, mientras que en radiobutton es la misma para todo un grupo similar de ellos.

3.- La razón principal para esta situación es que los radiobotones son mutuamente excluyentes entre si Y QUE SOLO UNO PUEDE ESTAR ENCENDIDO A LA VEZ por eso los agrupamos con la propiedad NAME para que html los pueda considerar como dos o mas grupos diferentes.

4.- Tambien tienen la propiedad checked para que aparezcan seleccionados al cargar el programa prog6 jsp

5.- A diferencia del checkbox, html va a regresar solamente el par NAME=VALUE de el radiobuton que este seleccionado, esto lo hace por cada grupo de radiobotones que tengamos en la forma html

Rrecordar que html regresa un y solo un par NAME=VALUE por cada grupo de radiobutton's que existan en la forma.html, asi que es bastante sencillo tomar el valor del radiobuton seleccionado y ya cargado este valor realizar o programar el proceso correspondiente.

Corrida:

Page 14: Tutorial JSP

TAREAS PROGRAMACION JAVA JSP

1.- CONSTRUIR UN CUESTIONARIO DE 6 PREGUNTAS SOBRE LOS HÁBITOS DE ESTUDIO DE UN ESTUDIANTE Y PASAR SUS RESPUESTAS A UNA PAGINA NUEVA.

2.- EVALUAR UNA FUNCION CUALESQUIERA, LA PAGINA HTML TIENE NAME = X

Y VALUE = 3, -5, 10

 

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA

TEMA 12: JAVA JSP CICLO FOR

Instrucciones para ciclos resuelven el problema de repetir todo el programa o cierta parte del programa mas de una vez.

Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones sobre todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instrucción simple o compuesta.

Su formato general es:

Page 15: Tutorial JSP

for (inicialización; condición; incremento)

{ instrucción(es); };

En su forma simple la inicialización es una instrucción de asignación que carga una variable de control de ciclo con un valor inicial.

La condición es una expresión relacional que evalúa la variable de control de ciclo contra un valor final o de parada que determina cuando debe acabar el ciclo.

El incremento define la manera en que la variable de control de ciclo debe cambiar cada vez que el computador repite un ciclo.

Se deben separar esos 3 argumentos con punto y coma ;

EJEMPLO

Codigo prog7 jsp y recuerden subirlo y pedirlo con:

http://programacionfacil.com/tusitio/prog7.jsp

<%

// mira ma'a sin usar forma

for (int x=1; x<=10; x++)

{ out.println("x= "+x+"<br>"); };

%>

El chiste va de la siguiente manera, un niño paseandose en una bicicleta;

Mira ma'a sin manos

Mira ma'a parado

Mira ma'a sin dientes

corrida: prog7 jsp

Page 16: Tutorial JSP

Casos Particulares del ciclo for:

1.- El ciclo comienza en uno y se incrementa de uno en uno este es el caso mas general.

2.- Pero el valor inicial puede se diferente de uno, ejemplo;

for(x=5;x⇐15;x=x+1){ etc.};

3.- Incluso el valor inicial puede ser negativo, ejemplo;

for (x = -3 ;x⇐ 8; x=x+1) { etc.};

4.- Los incrementos también pueden ser diferentes al de uno en uno, ej.;

for (x=1; x⇐ 20; x=x+3){ etc. };

5.- Incluso pueden ser decrementos, solo que en este caso, recordar;

5.1.-el valor inicial de la variable debe ser mayor que el valor final.

5.2.-cambiar el sentido de la condición.

ejemplo;

for (x= 50 ; x >= 10; x= x-4 ) { etcétera };

6.- Solo para los casos de incrementos y decrementos de una en una unidad substituir en el for;

Page 17: Tutorial JSP

el x = x + 1 por x++

el x = x - 1 por x–

TAREAS PROGRAMACION JAVA JSP

1.- CONSTRUIR UN PROGRAMA QUE DESPLIEGUE LOS NÚMEROS DEL 20 AL 30.

2.- DESPLEGAR LOS ENTEROS ENTRE 50 Y 30 ACOMPAÑADOS DE SU POTENCIA CUADRADA Y RAÍZ CUBICA RESPECTIVA(revisar el tema de operadores aritmeticos).

3.- DESPLEGAR LOS MÚLTIPLOS DE 5, ENTRE 10 Y 50, ACOMPAÑADOS DE SU FACTORIAL Y LOGARITMO RESPECTIVO(revisar el tema de operadores aritmeticos tambien).

4.- DESPLEGAR LA TABLA DE MULTIPLICAR QUE EL USUARIO INDIQUE.

5.- EVALUAR LA FUNCION <m> Y=5X^2 + 3X + 8</m> CUANDO X–> -3…10 (RANGO DE -3 HASTA 10)

UNIDAD 2: JAVA JSP CONTROL DE PROGRAMA

TEMA 13: JAVA JSP CICLO WHILE

En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca como verdadera en el momento en que la condición se convierte en falsa el ciclo termina.

Su formato general es :

cargar o inicializar variable de condición;

while(condición)

{

grupo cierto de instrucciones;

instrucción(es) para salir del ciclo;

};

Un error muy comun con el while, es poner un punto y coma(;) despues de la (condición) ejemplo while(condicion); ←-esto es y causa un error.

Prog8 jsp

Page 18: Tutorial JSP

ejecutarlo directamente como se indico en el tema anterior, excepto que si quieren pueden construir una forma.html y activarlo desde ahí.

<%! int x; %>

<%

x=1;

while (x<=10)

{

out.println("x= "+x+"<br>");

x++;

};

%>

corrida prog8 jsp

While puede llevar dos condiciones en este caso inicializar 2 variables de condición y cuidar que existan 2 de rompimiento o terminación de ciclo.

El grupo cierto de instrucciones puede ser una sola instrucción o todo un grupo de instrucciones.

La condición puede ser simple o compuesta.

Page 19: Tutorial JSP

Los casos generales de for tambien se aplican a while.

A este ciclo también se le conoce también como ciclo de condición de entrada o prueba por arriba porque este ciclo evalúa primero la condición y posteriormente ejecuta las instrucciones.

TAREAS PROGRAMACION JAVA JSP

1.- DESPLEGAR ENTEROS ENTRE 50 Y 80

2.- DESPLEGAR MULTIPLOS DE 4 ENTRE 60 Y 20 ACOMPAÑADOS DE SU LOGARITMOS DE BASE 10 Y BASE e RESPECTIVOS.

3.- CONSTRUIR LA TABLA DE DIVIDIR QUE EL USUARIO INDIQUE.

4.- Evaluar una funcion cualesquiera para el rango de valores de x de -3 a +5

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA

TEMA 14: CICLO DO WHILE JAVA JSP

Su diferencia básica con el ciclo while es que la prueba de condición es hecha al finalizar el ciclo, es decir las instrucciones se ejecutan cuando menos una vez porque primero ejecuta las instrucciones y al final evalúa la condición;

También se le conoce por esta razón como ciclo de condición de salida.

Su formato general es :

cargar o inicializar variable de condición;

do {

grupo cierto de instrucción(es);

instrucción(es) de rompimiento de ciclo;

} while (condición);

prog9.jsp y ejecutarlo directamente( si quieren).

<%! int x; %>

<%

x=1;

do {

out.println("x= "+x+"<br>");

Page 20: Tutorial JSP

x++;

}while (x<=10);

%>

Corrida prog11.jsp

Otra diferencia básica con el ciclo while es que, aunque la condición sea falsa desde un principio el cuerpo de instrucciones se ejecutara por lo menos una vez.

Tareas Java Jsp

1.- tres del for

2.- tres del while

 

UNIDAD 3: JAVA JSP ARREGLOS

TEMA 3: JAVA JSP ARREGLOS TIPO LISTA

Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de datos del mismo tipo organizados en una sola columna y uno o mas renglones.

También reciben el nombre de vectores en álgebra o arreglos unidimensionales en programación.

Page 21: Tutorial JSP

Los procesos normales con una lista o con sus elementos, incluyen declarar toda la lista, capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.

Para declarar una lista se usa el siguiente formato;

tipodato nomlista[]= new tipodato[cant elementos];

SORPRESA, no existen en java jsp arreglos o listas tradicionales lo que existe es un objeto, por tanto se debera usar el operador new antes de empezar a procesar el arreglo, la ventajas son:

a) estas listas pueden usar el metodo length,(ejemplo nomlista.length;) para conocer el tamaño de la misma.

int edades[]= new int[12];

float sueldos[]=new float[5];

String municipios[]={“tijuana”,”tecate”,”ensenada”};

en este ulimo caso, observar que tambien pueden crearse listas ya con tamaño fijo e inicializadas o cargadas

notas:

Recordar también que la primera posición o renglón en una lista es la posición o renglón 0 (cero).

Prog10 jsp

<%! int edad[]=new int[5], ren=0; %>

<%

String temp1=request.getParameter("INSERTAR");

if(temp1==null)temp1=" ";

if(temp1.compareTo("insertar")==0){

if(ren < 5){

edad[ren]=Integer.parseInt(request.getParameter("EDAD"));

ren=ren+1;};

if(ren==5){out.print("ARREGLO LLENO");};

};

if(request.getParameter("SUMAR") != null )

{

Page 22: Tutorial JSP

// operaciones

for(ren=0; ren<=4; ren++) edad[ren]=edad[ren]* 12;

// DESPLEGANDO EN OBJETO LISTA DE HMTL CON BULLETS FOR NORMAL

out.println("EDADES EN MESES");

out.println("<UL>");

for(ren=0;ren<=4;ren++)

{out.println("<LI>"+edad[ren]); };

out.println("</UL>");

// DESPLEGANDO EN OBJETO LISTA DE HMTL FOR NORMAL

out.println("<OL>");

for(ren=0; ren<=4; ren++)

{ out.println("<LI>"+edad[ren]); };

out.println("</OL>");

// DESPLEGANDO USANDO OBJETO TABLE DE HMTL FOR NORMAL

out.println("<table border=2><tr><th>EDADES EN MESES</th></tr>");

for(ren=0; ren<=4; ren++)

{ out.println("<tr><td>"+edad[ren]+"</td></tr>"); };

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog10.jsp METHOD=post>");

out.println("DAME EDAD:"+ren+"<INPUT TYPE=TEXT NAME=EDAD>");

out.println("<INPUT TYPE=SUBMIT NAME=INSERTAR VALUE=insertar ><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=SUMAR VALUE=sumar><BR>");

out.println("</FORM>");

%>

Corrida:

Page 23: Tutorial JSP

notas:

Se estan usando dos SUBMIT en el prrograma, el primero de ellos para insertar los elementos en la lista y el segundo para convertirlos a meses.

Es por esta razon que primero se lee el TEXTBOX “INSERTAR” y si trae “null” se cambia por un especio en blanco, la razon es porque java no permite comparar strings contra “null”. Se esta usando una variable contador llamada “reng” para controlar tantos los indices de la lista o vector asi como para controlar la cantidad de elementos que se van a insertar en el arreglo.

Para el caso de operaciones y comparaciones con todos los elementos de la lista a la vez, se deberá usar un ciclo for con una variable entera llamada renglón misma que también se usa como índice de la lista.

Recordar que todos los datos internos de la lista estarán almacenados en la memoria ram del computador, para despliegues se pueden usar varios tipos de objetos y controles de html(LIST y TABLE revisar tutorial de html).

Page 24: Tutorial JSP

Para este programa ejemplo se usaron los dos casos mas comunes de listas en html (UL y OL) ver tutorial y tambien se uso Table de html, por supuesto que en sus programas normales deberan usar un solo caso de estos tres de preferencia el TABlE.

Para inicializar una lista se debe usar el siguiente formato:

tipodato nomlista[]={lista de valores};

ej;

int edad[4]={15,16,17,18};

float sueldo[3]={40.85, 65.30, 33.33};

String *ciudad[]={“tecate”, “tijuana”, “mexicali”, “rosarito”, “ensenada”};

TAREAS PROGRAMACION JAVA JSP

1.- Capturar y desplegar 5 precios de mercancias cualesquiera.

2.- Capturar 4 sueldos, desplegarlos aumentados en un 25%.

3.- Capturar los datos de 5 mercancias comprados en una tienda, incluyendo nombre, precio y cantidad en sus 3 listas respectivas( se vale inicializar los arreglos de nombre y precio), después calcular una cuarta lista con el gasto total por cada producto desplegarlo todo e incluir también el gran total.

UNIDAD 3: JAVA JSP ARREGLOS

TEMA 4: ARREGLOS BIDIMENSIONALES TIPO TABLA

Un arreglo tipo tabla se define como un conjunto de datos del mismo tipo organizados en dos o mas columnas y uno o mas renglones.

Para procesar ( recordar solo operaciones y comparaciones) internamente todos los elementos de la tabla se ocupan dos ciclos for(), uno externo para controlar renglón y uno interno para controlar columna.

Los elementos de la tabla se deberan simbolizar con el nombre de la tabla y 2 subindices, el primer subindice referencia al renglon y el siguiente subindice referencia la columna los dos dentro del mismo corchete.

La declaración de una tabla sera de acuerdo a los siguientes formatos:

1) tipodato nomtabla[][]= new tipodato[reng][col];

ejemplo:

int calif[][]=new int[3][4];

Page 25: Tutorial JSP

double ingresos[][]= new double[3][4];

2) Clasenumerica objetotabla[][]= new constructor[ren][col];

ejemplo;

Integer calif[][]= new Integer[2][3];

Double ingresos[][]=new Double[3][4];

Para capturar sus elementos, usaremos el procedimiento desarrollado con listas.

Para efectuar otros procesos tales como operaciones despliegue con todos los elementos de la tabla se deberan usar 2 ciclos un for externo para controlar renglon y un for interno para controlar columna.

Prog11 jsp

<%! int edad[][]=new int[2][3], ren=0, col=0; %>

<%

String temp1=request.getParameter("INSERTAR");

if(temp1==null)temp1=" ";

if(temp1.compareTo("insertar")==0){

if(col < 3){

edad[ren][col]=Integer.parseInt(request.getParameter("EDAD"));

col=col+1;};

if(col == 3){col=0;ren=ren+1;};

if(ren==2) {out.print("TABLA LLENA");};

};

if(request.getParameter("MESES") != null )

{

// operaciones

for(ren=0; ren<=1; ren++)

for(col=0;col<=2;col++)

edad[ren][col]=edad[ren][col]*12;

// DESPLEGANDO USANDO OBJETO TABLE DE HMTL FOR NORMAL

out.println("<table border=2><tr><th>EDAD EN MESES</th></tr>");

Page 26: Tutorial JSP

for(ren=0; ren<=1; ren++)

{ out.println("<tr>");

for(col=0;col<=2;col++)

{ out.println("<td>"+edad[ren][col]+"</td>"); };

out.println("</tr>"); };

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog11.jsp METHOD=post>");

out.println("DAME EDAD:"+ren+","+col+"<INPUT TYPE=TEXT NAME=EDAD>");

out.println("<INPUT TYPE=SUBMIT NAME=INSERTAR VALUE=insertar ><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=MESES VALUE=meses><BR>");

out.println("</FORM>");

%>

Corrida:

Notas:

Page 27: Tutorial JSP

Observar el formato de declaración y como se controlan los indices de captura reng, col.

notas:

El for reng tiene su propio grupo de instrucciones encerrados entre {}. Mientras que el for col solo tiene una instrucción que ejecutar el print(celda ), el ultimo print(</termina renglon) es del ciclo for reng).

El renglon de encabezado solo tiene una celda, por eso los otros dos renglones con mas celdas se ajustarón por su cuenta, para corregir esta situación revisar su tutorial de html(TABLE).

Para inicializar tablas, se debera usar el siguiente formato:

tipodato nomtabla[2][3]={1,2,3,4,5,6 };

TAREAS PROGRAMACION JAVA JSP

1.- CONSTRUIR UN CUADRO QUE CONTENGA LOS COSTOS FIJOS DE CUATRO PRODUCTOS CUALESQUIERA, QUE SE PRODUCEN EN TRES PLANTAS DIFERENTES DE UNA EMPRESA MAQUILADORA.

2.- CONSTRUIR UN CUADRO QUE CONTENGA LOS INGRESOS MENSUALES POR VENTAS DURANTE LOS TRES PRIMEROS MESES DEL AÑO DE CUATRO SUCURSALES DE UNA CADENA DE AUTO REFACCIONES, AGREGAR AL FINAL UNA LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR MESES Y UNA SEGUNDA LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR SUCURSAL(2 programas uno capturado y otro inicializado).

3.-CONSTRUIR UN CUADRO QUE CONTENGA LAS COMISIONES GANADAS POR TRES VENDEDORES, DE LOS 5 TIPOS DE LINEA BLANCA DE CONOCIDA MUEBLERIA, ADEMAS LISTAS DE COMISIONES TOTALES Y PROMEDIOS GANADAS POR LOS VENDEDORES, ASI COMO LISTAS DE COMISIONES TOTALES Y PROMEDIOS POR TIPO DE LINEA BLANCA(inicializado).

ANALIZAR ESTE CODIGO:

' PARA TOTALES Y PROMEDIOS POR RENGLON

FOR R = 0 TO 3

FOR C = 0 TO 2

TOTRENG(R) = TOTRENG(R) + TABLA(R,C)

NEXT C

PROMRENG(R) = TOTRENG(R)/3

NEXT R

Page 28: Tutorial JSP

'PARA TOTALES Y PROMEDIOS POR COLUMNA

FOR C = 0 TO 2

FOR R = 0 TO 3

TOTCOL(C)=TOTCOL(C) + TABLA(R,C)

NEXT R

PROMCOL(C) = TOTCOL(C) / 4

NEXT C

SUGERENCIA: CONSTRUIR PRIMERO LOS CUADROS EN PAPEL.

UNIDAD 4: JAVA PROGRAMACION ORIENTADA OBJETOS

TEMA 1: DECLARACIONES o PROCEDIMIENTOS JAVA JSP

Un camino para dividir un gran programa en partes mas pequeñas es el uso de declaraciones.

Una declaración es un grupo de instrucciones, variables, constantes, etc, que estan diseñados con un próposito particular y tiene su nombre propio.

Es decir una declaracion es un modulo de un programa que realiza una tarea especifica y que no puede regresar valores al programa principal u a otro procedimiento que lo este invocando.

Despue de escribir una declaración se usara ese nombre propio como una sola instrucción o llamada.

Las declaraciones se construyen antes del cuerpo principal del programa, es decir en la parte declarativa.

Su formato es:

<%! void Nom_decl(){instrucciones;} %>

Un programa puede tener tantos procedimientos como se deseen, para hacer una llamada o invocación a el procedimiento durante la ejecución de un programa se debera escribir el nombre dela misma y los parentesis en blanco.

Prog12.jsp

<%!

int base=0,altura=0; double area=0;

Page 29: Tutorial JSP

void proc1(){

area= base * altura / 2.0 ;};

%>

<%

// no usar objetos request y out fuera de scriptlet

// porque no estan creados por java todavia

if(request.getParameter("OK") != null)

{

base = Integer.parseInt(request.getParameter("BASE"));

altura = Integer.parseInt(request.getParameter("ALTURA"));

// llamando o invocando procedimiento uno

proc1();

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog12.jsp METHOD=post>");

out.println("DAME LA BASE:<INPUT TYPE=TEXT NAME=BASE value="+base+"><BR>");

out.println("DAME LA ALTURA:<INPUT TYPE=TEXT NAME=ALTURA value="+altura+"><BR>");

out.println("AREA:<INPUT TYPE=TEXT NAME=AREA value="+area+"><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

Corrida:

Page 30: Tutorial JSP

Recordar que no se deben usar los objetos REQUEST y OUT antes de la parte principal del programa (esto porque java convierte el jsp a un servlet y la creación de REQUEST y OUT lo hace despues, generando errores de objetos request y out desconocidos).

TAREAS PROGRAMACION JAVA JSP

Construir un programa java jsp que contenga puras llamadas a procedimientos dentro de un menu.

Menu.

a) Pesos a dolares.

b) Area de un triangulo.

c) Emitir Boleta.

d) Fin de menu.

UNIDAD 4: JAVA JSP PROGRAMACION ORIENTADA OBJETOS

TEMA 2: PARAMETROS JAVA JSP

Un parametro es una variable que puede pasar su valor a un procedimiento desde el principal o desde otro procedimiento.

Existen ocasiones en que es necesario mandar al procedimiento ciertos valores para que los use en algún proceso.

Page 31: Tutorial JSP

Estos valores que se pasan del cuerpo principal del programa al procedimiento se llaman parametros.

Entonces una declaracion completa es:

<%! void NomProc(lista de parametros)

{ cuerpo de instrucciones; }; %>

prog13.jsp

<%!

int base=0; double altura=0; double area=0;

void proc1(int a, double b){

area= a * b / 2.0 ;};

%>

<%

// no usar objetos request y out fuera de scriptlet

// porque no estan creados por java todavia

if(request.getParameter("OK") != null)

{

base = 10;

altura = 3.1416;

// llamando o invocando procedimiento uno y pasando parametros

// recordar que se pueden mandar datos o variables

proc1(base,3.1416);

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog13.jsp METHOD=post>");

out.println("DAME LA BASE:<INPUT TYPE=TEXT NAME=BASE value="+base+"><BR>");

out.println("DAME LA ALTURA:<INPUT TYPE=TEXT NAME=ALTURA value="+altura+"><BR>");

out.println("AREA:<INPUT TYPE=TEXT NAME=AREA value="+area+"><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

Page 32: Tutorial JSP

%>

CORRIDA:

REGLAS PARA EL USO DE PARAMETROS

1.- Cuando se usan variables como parametros, la variable que se manda debe ser declarada dentro del principal o del procedimiento de donde se esta enviando.

2.- La variable que se manda tiene un nombre, la que se recibe puede tener otro nombre.

3.- La cantidad de variables que se envian deben ser igual en cantidad, orden y tipo a las variables que reciben.

4.- La variable que se recibe tiene un ambito local dentro del procedimiento, es decir solo la puede usar ese procedimiento.

TAREAS PROGRAMACION JAVA JSP

1.- Capturar el nombre y las 3 calificaciones en un procedimiento, calcular promedio en un segundo, imprimir nombre y promedio en principal

2.- Construir una tabla de multiplicar que el usuario indique captura y control de ciclo en el principal, calculo en un procedimiento.

3.- Construir un procedimiento que reciba un numero entero y que mande llamar a un segundo procedimiento pasando el letrero “PAR O IMPAR”.

UNIDAD 4: JAVA JSP PROGRAMACION ORIENTADA OBJETOS POO

TEMA 3: JAVA JSP VARIABLES LOCALES Y GLOBALES

Page 33: Tutorial JSP

En java Jsp el lugar donde sea declarada una variable afectara el uso que el programa quiera hacer de esa variable.

Las reglas basicas que determinan como una variable puede ser usada depende de 3 lugares donde se puede declarar una variable.

En primer lugar es dentro de cualquier función o procedimiento incluyendo main, a estas se les llama variables locales y solo pueden ser usadas por instrucciones que esten dentro de esa función o procedimiento.

En segundo lugar es como parametro de una función o procedimiento, donde despues de haber recibido el valor, podra actuar como variable local en esa función o procedimieto.

En escencia una variable local solo es conocida por el código de esa función o procedimieto y es desconocida por otras funciones o procedimientos.

En tercer lugar es fuera de todas las funciones pero dento de la parte declarativa <%! … %>, a este tipo de variables se les llama variables globales y podran ser usadas por cualquier función o procedimiento del programa.

UNIDAD 4: JAVA JSP PROGRAMACION ORIENTADA OBJETOS POO

TEMA 4: JAVA JSP FUNCIONES

En jaba jsp una funcion es un modulo de un programa separado del cuerpo principal, que realiza una tarea especifica y que puede regresar un valor a la parte principal del programa u otra funcion o procedimiento que la invoque.

La forma general de una funcion es:

<%! tipodatoregresa Nom_fun(parametros)

{ cuerpo de instrucciones;

intruccion return;

}; %>

El tipo especifica el tipo de valor que la funcion regresara utlizando la instrucción return.

Si no se especifica un tipo se asume de default que el tipo regresado es int.

La lista de parametros formales es una lista de variables separadas por comas (,) que almacenaran los valores que reciba la funcion, estas variables actuan como locales dentro del cuerpo de la funcion.

Aunque no se ocupen parametros los paréntesis son requeridos.

La declaracion de parametros es la especificacion de cada tipo de parametro recibido.

Page 34: Tutorial JSP

INSTRUCCION RETURN

Dentro del cuerpo de la función deber haber una instrucción return cuando menos, para regresar el valor, esta instrucción permite regresar datos.

Prog14 jsp

<%!

double res=0;

double funcion1(int a, double b){

return a * b; };

%>

<%

// no usar objetos request y out fuera de scriptlet

// porque no estan creados por java todavia

if(request.getParameter("OK") != null)

{

// llamando o invocando funcion uno y pasando parametros

// recordar que se pueden mandar datos o variables

double alfa=funcion1(2,2.5) + 3 + funcion1(2, 3.3);

res= alfa;

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog14.jsp METHOD=post>");

out.println("RESULTADO:<INPUT TYPE=TEXT NAME=RESULTADO value="+res+"><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

corrida:

Page 35: Tutorial JSP

Es permitido poner mas de un return en el cuerpo de instrucciones sobre todo en condiciones, pero solo un return se ejecutara.

Ejemplo;

if (suma >= 10)

{ return 10; }

else

{ return 20; }

EXISTEN 3 CLASES USUALES DE FUNCIONES.

Las primeras son de tipo computacional que son diseñadas para realizar operaciones con los argumentos y regresan un valor basado en el resultado de esa operación.

Las segundas funciones son aquellas que manipulan información y regresan un valor que indican la terminacion o la falla de esa manipulacion.

Las terceras son aquellas que no regresan ningun valor, es decir son estrictamenta procedurales.

TAREAS PROGRAMACION JAVA JSP

1.- Imprimir nombre y promedio de un alumno, capturar 3 calificaciones y nombre en un procedimiento, calcular promedio en una funcion y desplegar

2.- Crear una tabla de multiplicar, captura y control de ciclo en el principal, operaciones en una funcion, despliegue en el principal.

Page 36: Tutorial JSP

3.- Construir una funcion que nos regrese el triple de cualquier numero.

4.- Construir un programa que emita una factura si el articulo es importado, una funcion lo graba con el 20% de iva si es nacional, la misma funcion lo graba con el 15% de iva si no lo es.

5.- Construir una funcion que nos regrese la letra “I” o “P” si el numero que recibio fue impar o par respectivamente.

UNIDAD 4: JAVA JSP PROCEDIMIENTOS Y FUNCIONES

TEMA 5: JAVA JSP ARREGLOS COMO PARAMETROS

Para pasar un arreglo completo como parametro a un procedimiento a una función solo se manda el nombre del arreglo sin corchetes e indices, en el procedimiento o función que recibe solo se declara un arreglo del mismo tipo y se puede usar el mismo o diferente nombre del arreglo sin corchetes e indices.

Sin embargo es conveniente aclarar, que a diferencia de variables escalares normales, java no genera una nueva variable en memoria ni tampoco copia los datos al arreglo que recibe, en su lugar java sigue usando los datos que estan en el arreglo original, es por esta razón que cambios que se le hagan a los datos del arreglo que recibe realmente se esta haciendo al arreglo original como lo muestra el siguiente ejemplo:

Prog15 jsp

<%!

//recordar que r es global

int r;

void decl1(int alfa[])

{

for(r=0;r<=2;r++)

alfa[r]=alfa[r]+10;

};

%>

<%

// no usar objetos request y out fuera de scriptlet

// porque no estan creados por java todavia

if(request.getParameter("OK") != null)

{

Page 37: Tutorial JSP

int eta[]={3,4,5};

decl1(eta);

for(r=0;r<=2;r++)

out.println("eta="+eta[r]+"<br>");

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog15.jsp METHOD=post>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

corrida prog15 jsp

Es de recordar que los cambios que le hagan al arreglo dentro de la función se reflejaran en el arreglo original, es por esto que si se quiere modificar un arreglo en una función no hay necesidad de regresar ningun valor.

TAREAS PROGRAMACION JAVA JSP

1.- Inicializar 10 edades en el principal mandar la lista a un procedimiento que la convierte a meses, desplegar en principal.

2.- Capturar un arreglo de 7 ciudades en principal, sortear u ordenar o alfabetizar (sorteo burbuja) en un procedimiento y desplegar en principal tanto la lista original como la lista ordenada.

Page 38: Tutorial JSP

 

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 2: REGISTROS JAVA JSP

Ya se ha visto como variables simples pueden almacenar una sola pieza de información y como arreglos pueden almacenar un conjunto de ellas del mismo tipo y al mismo tiempo, estos dos mecanismos pueden manejar una gran variedad de situaciones, pero a menudo se necesita trabajar sobre datos de diversos tipos, en este caso ni variables escalares ni arreglos son adecuados.

Para resolver estos problemas los lenguajes de programación proveen de un tipo de dato especial llamado registros.

Un registro es una variable especial que tiene la capacidad de almacenar datos de diferentes tipos.

Sin embargo JAVA usa en su lugar una CLASE.

Este metodo tiene la ventaja de que ademas de incluir los campos tradicionales de un registro (en forma de atributos) tambien puede incorporar una serie de metodos que permiten procesar de manera mas facil los campos o atributos de la clase.

Ejemplo;

class alumno{

void alumno(){};

static String nombre= new String();

static int edad;

void inicializar(){

alumno.nombre="pepe el toro";

alumno.edad=18; };

void desplegar(){

System.out.println(alumno.nombre);

System.out.println(alumno.edad);

};

} // termina la clase

Programa 16.jsp;

Page 39: Tutorial JSP

<%!

static class alumno{

static String nombre=" ";

static int edad=0;

void alumno(){};

static void inicializar(){

alumno.nombre="pepe el toro";

alumno.edad=18; };

};

%>

<%

if(request.getParameter("OK") != null)

{

alumno.inicializar();

out.println(alumno.nombre);

out.println(alumno.edad);

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog16.jsp METHOD=post>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=evento1 ><BR>");

out.println("</FORM>");

%>

corrida:

Page 40: Tutorial JSP

Recordar no usar objetos OUT, Request en la parte declarativa de el programa, la razón ya se explico anteriormente.

Para indicar a “java” durante cualquier proceso que la variable a utilizar es un campo de una clase se debera utilizar el siguiente formato.

nomclase.nombredelcampo

TAREAS PROGRAMACION JAVA JSP

1.-Crear una clase de alumno que incluya un metodo que capture 3 califaciones.

2.-Declarar una clase o registro de empleado, capturarlo y desplegarlo un numero indeterminado de veces.

3.- Capturar una clase o registro de empleados, aumentar sueldo en 25% y desplegar.

4.-Capturar una clase o registro de cuentas por cobrar, mandar imprimir un aviso si el saldo esta atrazado.

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 3: JAVA JSP ARCHIVOS (INTRODUCCION)

Si bien es cierto que ya se pueden manejar gran cantidad de datos del mismo y diferente tipo al mismo tiempo, el problema es que al terminar de ejecutarse el programa los datos se pierden.

De esta situación nace el concepto de archivos que son medios que facilita el lenguaje para almacenar los datos en forma permanente normalmente en los dispositivos de almacenamiento standar.

En general es necesario entender algunos conceptos elementales de sistemas de archivos tradicionales.

Page 41: Tutorial JSP

Como nota a tomar en cuenta los datos que se van almacenando en un archivo de disco se almacenan en renglones consecutivos y cada renglon en disco se conoce como registro del archivo favor de no confundir el concepto de registro de archivo y registro o estructura como variable ya analizada son dos cosas totalmente diferentes aunque se llamen igual.

Operaciones basicas con archivos:

1. ESCRIBIR O GRABAR: Es la operacion mas elemental con un archivo consiste en tomar un o unos datos en variables de cualquier tipo (escalar, mezcla de datos, arreglo, structuras) y almacenarlas en un archivo de datos en disco.

2. LEER: Operación consistente en sacar los datos del archivo en disco y mandarlo o cargar la variable respectiva

Organización de archivos:

En general existen dos tipos de archivos:

1. Archivos Secuenciales.- En este caso los datos se almacenan en forma consecutiva y no es posible leer (recuerdan que significa esta operación) ningun registro (recuerdan la nota de arriba) directmente es decir para leer el registro n, se debera recorrer o accesar los n-1 registros anteriores.

2. Archivos Directos o Random.- Para este caso si se puede acceder o leer un renglon n cualquiera.

Tipo de archivos:

A) En general, existen tantos tipos de archivos como tipos de datos existen es decir existen archivos de bytes, de chars, de ints, de floats, etc.

ATENCION: Ya que se decide utilizar algun archivo especifico de datos (caracteres, strings, formateados, registros o arreglos) solo utilizar las funciones de escritura y lectura de ese tipo de archivo por ningun motivo mezcle funciones de lectura y escritura de otro tipo de archivos.

Almacenamiento en arhivos:

1. Modo Texto: en este caso los datos son almacenados usando codigp ascii y por tanto son plenamente visibles usando cualquier editor.

2. Modo Binario: en este caso los datos son almacenados en notación hexadecimal y por tanto se ocupa un editor binario para reconocerlos sin embargo un archivo binario es mas compacto que un archivo texto.

 

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 4: JAVA JSP ARCHIVOS SECUENCIALES PLANOS

Existen ademas muchas otras operaciones asociadas a archivos las mas elementales son:

Page 42: Tutorial JSP

1.- Creación de Archivo.- En este proceso se pretende solamente crear un archivo nuevo en disco, con su nombre, tipo y especialidad de almacenamiento de datos apropiado.

2.- Apertura de Archivos.- En este caso se pretende abrir un archivo ya existente en disco para procesarlo, ya sea cargar o grabar datos en sus registros, o leer algun registro en especial para mandarlo a una variable de cualquier tipo.

No confundir creación con apertura creación es un proceso que solo se ejecuta una sola vez en la vida de un archivo, mientras que apertura siempre se esta realizando por los programas especializados en algun proceso.

3.-Cierre de archivos: Es la operación mas importante en cualquier programa que maneje archivos o se cierra el archivo como ultima instrucción del pograma o se vera el anuncio ABORT,RETRY,FAIL.

98, /s, scandisk

4.-Altas en archivo.- En este proceso se carga una clase en memoria con sus datos pertinentes y se graba la clase en el archivo en disco.

5.-Lectura de archivo.- En este proceso, se abre el archivo y se manda el registro de disco, a una clase en memoria para su procesamiento.

6.- Consulta de archivos: En este proceso se pretende desplegar todos los registros del archivo en disco a la pantalla ya sea consola o mejor aún, a una pagina html

7.-Busqueda en archivos: Una de las operaciones mas comunes, consiste en que el usuario pide toda la información de algun renglon en disco, porporcionando la información de algun campo, generalmente el campo clave de la clase.

8.- Filtros.- En este proceso el usuario esta interesado en algun conjunto de renglones con caracteristicas comunes (condición), por ejemplo todos los alumnos de “sistemas”, o todos los empleados que ganen mas de $500.00 pesos, o todos los clientes que sean de “tijuana”, etc

9.-Modificaciones de registros o archivos: Problema muy comun, donde los datos originales ya grabados se tienen que cambiar o actualizar, por ejemplo el nombre no era “juan” es “juana”, o la calificación no es 100 es 20, etc.

10.- Bajas de registros: tambien muy comun este proceso por ejemplo el alumno ya egreso, el cliente huyo, etc.

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 5: GRABACION ARCHIVO SECUENCIAL JAVA JSP

Grabación y lectura son los dos procesos mas comunes con archivos disco en cualquier lenguaje de programación.

Codigo de grabación:

Page 43: Tutorial JSP

Prog17.jsp

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;String nombre=""; float estatura=0;

// creando un objeto de tipo archivo

DataOutputStream archivo = null;

if(request.getParameter("INSERTAR") != null)

{

// capturando datos

clave=Integer.parseInt(request.getParameter("CLAVE"));

nombre=request.getParameter("NOMBRE");

estatura=Float.parseFloat(request.getParameter("ESTATURA"));

try {

// creando archivo en append

archivo = new DataOutputStream(new FileOutputStream("c:\\archivo1.dat",true));

// grabando al archivo

archivo.writeInt(clave);

archivo.writeUTF(nombre);

archivo.writeFloat(estatura);

out.println(clave+": registro grabado");

}

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

// cerrando el archivo

archivo.close();

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog17.jsp METHOD=post>");

out.println("CLAVE :<INPUT TYPE=TEXT NAME=CLAVE><BR>");

Page 44: Tutorial JSP

out.println("NOMBRE :<INPUT TYPE=TEXT NAME=NOMBRE><BR>");

out.println("ESTATURA :<INPUT TYPE=TEXT NAME=ESTATURA><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=INSERTAR VALUE=GRABAR ><BR>");

out.println("</FORM>");

%>

corrida:

Se usa una clase llamada FileOutputStream, especializada en archivos con muchos metodos y constructores para crear, manipular y procesar archivos el constructor usado solo lleva dos parametros, el primero todo la ruta o path a donde quedara el archivo(cuidado con no poner la doble diagonal \\) y el segundo parametro es la palabra “true”, esto es para que el archivo se abra en modo llamado “APPEND”, es decir que cada nuevo registro se vaya escribiendo al final del archivo, si no se pone este parametro(true), un nuevo registro se sobreescribiria sobre el registro anterior.

Sin embargo en el programa no se uso solo FILEOUTPUSTREAM ( solo para crear el archivo), tambien se usa DATAOUTPUTSTREAM, esta segunda clase es derivada de la anterior y comparte muchos de sus metodos, la diferencia es que fileoutputstream esta especializada en grabar y leer bytes, mientras que dataoutputstream esta especializada en grabar y leer datos formateados, observar que los metodos que uso el objeto archivo para grabar o almacenar datos se especializan en algun tipo de dato en especial, sus otros metodos son:

Method Summary “void” flush”()” Flushes this data output stream. “int” size”()” Returns the current value of the counter “written”, the number of bytes

Page 45: Tutorial JSP

written to this data output stream so far.

“void” write”(byte[] b, int off, int len)“Writes “len” bytes from the specified byte array starting at offset “off” to the underlying output stream.

“void” write”(int b)” Writes the specified byte (the low eight bits of the argument “b”) to the underlying output stream.

“void” writeBoolean”(boolean v)” Writes a “boolean” to the underlying output stream as a 1-byte value.

“void” writeByte”(int v)“Writes out a “byte” to the underlying output stream as a 1-byte value.

“void” WriteBytes (String s) Writes out the string to the underlying output stream as a sequence of bytes.

“void” writeChar”(int v)” Writes a “char” to the underlying output stream as a 2-byte value, high byte first.

“void” WriteChars (String s) writes a string to the underlying output stream as a sequence of characters.

“void”

writeDouble”(double v)“Converts the double argument to a “long” using the “doubleToLongBits” method in class “Double”, and then writes that “long” value to the underlying output stream as an 8-byte quantity, high byte first.

“void” writeFloat”(float v)” Converts the float argument to an “int” using the “floatToIntBits” method in class “Float”, and then writes that “int” value to the underlying output stream as a 4-byte quantity, high byte first.

“void” writeInt”(int v)“Writes an “int” to the underlying output stream as four bytes, high byte first.

“void” writeLong”(long v)“Writes a “long” to the underlying output stream as eight bytes, high byte first.

“void” writeShort”(int v)“Writes a “short” to the underlying output stream as two bytes, high byte first.

“void” writeUTF (String str) writes a string to the underlying output stream using UTF-8 encoding in a machine-independent manner.

TABLA TOMADA DEL API DE JAVA

Observar que la grabación lleva un try-catch filenotfound y ioexception, que son obligatorios o no compila el programa.

No olvidar cerrar el archivo, con la instruccion archivo.close

TAREAS PROGRAMACION JAVA JSP

1.- crear y cargar un archivo2.dat que contenga registros de empleados.

2.- crear y cargar un archivo3.dat que contenga registros de productos

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 6: LECTURA ARCHIVO SECUENCIAL JAVA JSP

Page 46: Tutorial JSP

El proceso de lectura de los registros de un archivo secuencial es realmente sencillo, como lo muestra el siguiente codigo ejemplo;

Prog18.jsp:

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;String nombre=""; float estatura=0;

// creando un objeto de tipo archivo

DataInputStream archivo = null;

if(request.getParameter("LECTURA") != null)

{

// construyendo una tabla html

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th></TR>");

try {

// abriendo archivo

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

// ciclo de lectura del archivo

while(true){

out.println("<TR>");

clave=archivo.readInt();

out.println("<TD>"+clave+"</TD>");

nombre=archivo.readUTF();

out.println("<TD>"+nombre+"</TD>");

estatura=archivo.readFloat();

out.println("<TD>"+estatura+"</TD>");

out.println("</TR>");

} }

catch(FileNotFoundException fnfe) {}

Page 47: Tutorial JSP

catch (IOException ioe) {};

archivo.close();

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog18.jsp METHOD=post>");

out.println("<INPUT TYPE=SUBMIT NAME=LECTURA VALUE=leer ><BR>");

out.println("</FORM>");

%>

Corrida:

Notas:

Observar en codigo que ahora se usan FILEINPUTSTREAM Y DATAINPUTSTREAM como clases.

En fileinputstream solo se uso el parametro de abrir archivo(no el true de append) como ya se menciono estas clases se especializan en archivos secuenciales.

El ciclo de lectura se realiza con un while(true)

los metodos de DATAINPUTSTREAM SON:

Page 48: Tutorial JSP

Method Summary

“int” read”(byte[] b)“See the general contract of the “read” method of “DataInput”.

“int” read”(byte[] b, int off, int len)“See the general contract of the “read” method of “DataInput”.

“boolean” readBoolean”()“See the general contract of the “readBoolean” method of “DataInput”.

“byte” readByte”()“See the general contract of the “readByte” method of “DataInput”.

“char” readChar”()“See the general contract of the “readChar” method of “DataInput”.

“double” readDouble”()“See the general contract of the “readDouble” method of “DataInput”.

“float” readFloat”()“See the general contract of the “readFloat” method of “DataInput”.

“void” readFully”(byte[] b)“See the general contract of the “readFully” method of “DataInput”.

“void” readFully”(byte[] b, int off, int len)“See the general contract of the “readFully” method of “DataInput”.

“int” readInt”()“See the general contract of the “readInt” method of “DataInput”.

String

with: BufferedReader d

= new BufferedReader(new InputStreamReader(in)); |

| “long” | readLong”()“See the general contract of the “readLong” method of “DataInput”. |

“short” readShort”()“See the general contract of the “readShort” method of “DataInput”.

“int” readUnsignedByte”()“See the general contract of the “readUnsignedByte” method of “DataInput”.

“int” readUnsignedShort”()“See the general contract of the “readUnsignedShort” method of “DataInput”.

String readUTF”()“See the general contract of the “readUTF” method of “DataInput”.

“static” String

readUTF”(“DataInput “in)“Reads from the stream “in” a representation of a Unicode character string encoded in Java modified UTF-8 format; this string of characters is then returned as a “String”.

“int” skipBytes”(int n)“See the general contract of the “skipBytes” method of “DataInput”.

TAREAS PROGRAMACION JAVA JSP

1.- Leer y desplegar los archivos creados en el tema anterior.

Page 49: Tutorial JSP

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 7: BUSQUEDA ARCHIVOS SECUENCIALES JAVA JSP

Recordar que existen una serie de procesos basicos con archivos el famoso y antiguo ABC (altas, bajas, consultas y modificaciones) con ellos.

Actualmente estos procesos o similares a ellos se llaman insertar, eliminar, editar, etc, en las modernas bases de datos pero esto lo analizaremos mas adelante.

El primer proceso para un archivo secuencial es agregar una cantidad indefinida de registros al archivo este proceso se resuelve o ejecutando una cantidad indeterminada de veces el programa de grabación ya hecho o incluir un ciclo while en el mismo programa.

Un segundo proceso tambien comun, llamado consulta es desplegar todos los registros del archivo a la vez problema tambien resuelto en el programa de lectura.

El tercer Proceso que “resolvemos” en este tema es la busqueda de un registro determinado, en este proceso el usuario del programa quiere que se despliegue un y solo un registro de información, proporcionando un dato de busqueda, generalmente la clave del registro.

La solucion es sencilla, solo tenemos que abrir el archivo para lectura, hacer un ciclo while(true) condicionar y solo desplegar el registro cuando se cumpla la condición.

Codigo prog19.Java:

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;int claveb=0;String nombre=""; float estatura=0;

// creando un objeto de tipo archivo

DataInputStream archivo = null;

if(request.getParameter("BUSCAR") != null)

{

// construyendo tabla html

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th></TR>");

// capturando clave a buscar

claveb=Integer.parseInt(request.getParameter("CLAVEB"));

Page 50: Tutorial JSP

try {

// abriendo archivo

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

while(true){

clave=archivo.readInt();

nombre=archivo.readUTF();

estatura=archivo.readFloat();

if (claveb==clave){

out.println("<TR>");

out.println("<TD>"+clave+"</TD>");

out.println("<TD>"+nombre+"</TD>");

out.println("<TD>"+estatura+"</TD>");

out.println("</TR>");

} } }

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

archivo.close();

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog19.jsp METHOD=post>");

out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar><BR>");

out.println("</FORM>");

%>

Corrida programa java:

Page 51: Tutorial JSP

TAREAS PROGRAMACION JAVA JSP

1.- Hacer programas de busquedas para los archivos hechos.

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 8: JAVA JSP FILTROS o CONDICIONES

Como su nombre lo indica en este proceso se pretende desplegar todo un conjunto de renglones que cumplan con la condición por ejemplo se pide desplegar todos los alumnos de “sistemas” o todos los empleados que sean de “sinaloa”, etc.

Filtros se usan para obtener información acerca de un subconjunto de renglones de el archivo.

Codigo prog20 jsp

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;float est=0;String nombre=""; float estatura=0;

// creando un objeto de tipo archivo

DataInputStream archivo = null;

if(request.getParameter("FILTRAR") != null)

Page 52: Tutorial JSP

{

// construyendo tabla html

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th></TR>");

// capturando filtro

est=Float.parseFloat(request.getParameter("ESTATURA"));

try {

// abriendo archivo

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

while(true){

clave=archivo.readInt();

nombre=archivo.readUTF();

estatura=archivo.readFloat();

if (estatura>=est){

out.println("<TR>");

out.println("<TD>"+clave+"</TD>");

out.println("<TD>"+nombre+"</TD>");

out.println("<TD>"+estatura+"</TD>");

out.println("</TR>");

} } }

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

archivo.close();

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog20.jsp METHOD=post>");

out.println("ESTATURA >=:<INPUT TYPE=TEXT NAME=ESTATURA><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=FILTRAR VALUE=Filtrar><BR>");

out.println("</FORM>");

%>

Page 53: Tutorial JSP

Corrida filtro:

Seria mas interesante construir un programa donde el filtro se construya con dos comboboxs y un textbox para el dato(recordar definición de condición simple) y de esta manera se podra construir un programa que filtre por cualuier campo y por cualquier operador relacional, pero este programa es la

1.- TAREA Java Jsp Filtrar el archivo de alumnos por cualquier campo.

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 9: JAVA JSP BAJA O ELIMINACION ARCHIVO SECUENCIAL

Eliminar o dar de baja en un archivo secuencial, implica tener que estar procesando dos archivos a la vez, el segundo de ellos es un archivo temporal, un algoritmo de eliminacion fisica quedaria como:

Procedimiento :

1.- Abrir el archivo original en modo letcura.

2.- Abrir un archivo llamado temporal en modo escritura.

3.- Iniciar un ciclo de lectura del archivo original.

3a.- Dentro del ciclo leer el primer registro.

Page 54: Tutorial JSP

3b.- Validar el registro si no es eliminable, se escribe al

archivo temporal.

3c.- Fin de ciclo (cerrar el ciclo).

4.- Cerrar ambos archivos.

5.- eliminar el archivo original.

6.- renombrar el archivo temporal con el nombre de archivo original.

Una segunda tecnica, consiste en agregar un campo de estado (status) al registro, tal como se vio en el curso anterior:

Sin embargo el proceso de baja se tiene que realizar en un sistema de información, para resolver este problema la respuesta es agregar un campo especial llamado status que puede ser de tipo char, con algunos caracteres de control que se puedan cargar en el por ejemplo una 'a' siginifica que esta en alta, una 'b' significa que esta en baja, etc.

Lo unico que se tiene que hacer, es que cuando se agrega o manda el registro por primera vez a disco, mandarlo cargado el campo de status con 'a' y estar validando con if siempre este campo en cualquier proceso de busqueda o condicion o despliegue, si se encuentra cargado con 'b' entonces solo avisar al usuario que esta de baja dicho registro.”

A continuación damos un ejemplo de eliminación fisica:

Prog21 jsp

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;int claveb=0;String nombre=""; float estatura=0;

// creando un objeto de tipo archivo

DataInputStream archivo = null;

DataOutputStream archivot = null;

if(request.getParameter("ELIMINAR") != null)

{

// capturando clave a eliminar

claveb=Integer.parseInt(request.getParameter("CLAVEB"));

try {

Page 55: Tutorial JSP

// abriendo archivos

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

archivot = new DataOutputStream(new FileOutputStream("c:\\temp.dat",true));

while(true){

clave=archivo.readInt();

nombre=archivo.readUTF();

estatura=archivo.readFloat();

if (claveb!=clave){

archivot.writeInt(clave);

archivot.writeUTF(nombre);

archivot.writeFloat(estatura);

}}}

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

// cerrando archivos

archivo.close();

archivot.close();

// eliminando original renombrando temporal

File file1 = new File("c:\\archivo1.dat");

File file2 = new File("c:\\temp.dat");

if (file1.exists()) {file1.delete();};

file2.renameTo(file1);

// avisando

out.println("REGISTRO ELIMINADO");

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog21.jsp METHOD=post>");

out.println("CLAVE ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=ELIMINAR VALUE=Eliminar><BR>");

out.println("</FORM>");

Page 56: Tutorial JSP

%>

corrida:

TAREAS PROGRAMACION JAVA JSP

1.- Agregar un modulo de eliminacion o baja, a los archivos ya construidos.

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 10: OPERACIONES CON CAMPOS JAVA JSP

Este es tambien un caso comun con los elementos de un archivo, sin embargo es tambien facil de resolver.

Solo usar los dos archivos el original y el temporal y antes de grabarse al temporal hacer la operacion correspondiente, como lo muestra el siguiente ejemplo.

Prog22.jsp

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;String nombre=""; float estatura=0;

// creando dos objetos de tipo archivo uno para escritura y otro para lectura

DataInputStream archivo = null;

Page 57: Tutorial JSP

DataOutputStream archivot = null;

if(request.getParameter("SUMAR") != null)

{

try {

// abriendo archivos

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

archivot = new DataOutputStream(new FileOutputStream("c:\\temp.dat",true));

while(true){

clave=archivo.readInt();

nombre=archivo.readUTF();

estatura=archivo.readFloat();

// sumando

estatura = estatura + 5;

// grabando a temporal

archivot.writeInt(clave);

archivot.writeUTF(nombre);

archivot.writeFloat(estatura);

}}

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

// cerrando archivos

archivo.close();

archivot.close();

// eliminando original renombrando temporal

File file1 = new File("c:\\archivo1.dat");

File file2 = new File("c:\\temp.dat");

if (file1.exists()) {file1.delete();};

file2.renameTo(file1);

// avisando

out.println("ESTATURAS SUMADAS ");

Page 58: Tutorial JSP

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog22.jsp METHOD=post>");

out.println("<INPUT TYPE=SUBMIT NAME=SUMAR VALUE=EST+5><BR>");

out.println("</FORM>");

%>

corrida prog22.jsp:

Corrida prog18.jsp

Page 59: Tutorial JSP

1.- TAREAS PROGRAMACION JAVA JSP construir un archivo que traiga matricula, nombre, calif1, calif2, calif3 y promedio, cargar unos 5 renglones de alumnos, no cargar promedio, el promedio lo deberan calcular con un programa.

 

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 11: EDICION DE REGISTROS JAVA JSP

Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacíón o para corregir algun error de captura original o para agregar alguna columna que no existia por modificación de la tabla o la base de datos.

La solucion es similar a los temas anterior, es decir se ocupan los dos archivos el original y el temporal y ya sea que se modifique una sola clave o se modifiquen todos los registros, el ejemplo que se construye va mostrando los registros del archivo y pregunta y modifica o edita el registro pedido.

Prog23.jsp

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;int claveb=0;String nombre=""; float estatura=0;

// creando un objeto de tipo archivo

Page 60: Tutorial JSP

DataInputStream archivo = null;

DataOutputStream archivot = null;

// codigo de busqueda

String temp1=request.getParameter("BUSCAR");

if(temp1==null)temp1=" ";

if(temp1.compareTo("buscar")==0)

{

// capturando clave a buscar

claveb=Integer.parseInt(request.getParameter("CLAVEB"));

try {

// abriendo archivo

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

while(true){

clave=archivo.readInt();

nombre=archivo.readUTF();

estatura=archivo.readFloat();

if (claveb==clave){

out.println("<FORM ACTION=prog23.jsp METHOD=post>");

out.println("CLAVE :<INPUT TYPE=TEXT NAME=CLAVE value="+clave+"><BR>");

out.println("<INPUT TYPE=HIDDEN NAME=CLAVEB value="+claveb+"><BR>");

out.println("NOMBRE :<INPUT TYPE=TEXT NAME=NOMBRE value=\""+nombre+"\"><BR>");

out.println("ESTATURA :<INPUT TYPE=TEXT NAME=ESTATURA value="+estatura+"><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=EDITAR VALUE=editar><BR>");

out.println("</FORM>");

}

} }

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

Page 61: Tutorial JSP

archivo.close();

};

// codigo de edicion

String temp2=request.getParameter("EDITAR");

if(temp2==null)temp2=" ";

if(temp2.compareTo("editar")==0){

try {

// abriendo archivos

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

archivot = new DataOutputStream(new FileOutputStream("c:\\temp.dat",true));

// cargando clave de edicion

claveb=Integer.parseInt(request.getParameter("CLAVEB"));

while(true){

clave=archivo.readInt();

nombre=archivo.readUTF();

estatura=archivo.readFloat();

if (claveb != clave){

archivot.writeInt(clave);

archivot.writeUTF(nombre);

archivot.writeFloat(estatura);

}

else{

// capturando y grabando nuevos datos

clave=Integer.parseInt(request.getParameter("CLAVE"));

nombre=request.getParameter("NOMBRE");

estatura=Float.parseFloat(request.getParameter("ESTATURA"));

archivot.writeInt(clave);

archivot.writeUTF(nombre);

archivot.writeFloat(estatura);

};

Page 62: Tutorial JSP

}}

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

// cerrando archivos

archivo.close();

archivot.close();

// eliminando original renombrando temporal

File file1 = new File("c:\\archivo1.dat");

File file2 = new File("c:\\temp.dat");

if (file1.exists()) {file1.delete();};

file2.renameTo(file1);

// avisando

out.println("REGISTRO EDITADO");

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog23.jsp METHOD=post>");

out.println("CLAVE ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar><BR>");

out.println("</FORM>");

%>

corrida:

Page 64: Tutorial JSP

TAREAS PROGRAMACION JAVA JSP

1.- construir programas de edición para sus archivos

UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES

TEMA 12: GRAFICOS JAVA JSP

Campos de graficos o de imagenes se han convertido en elementos importantes de cualquier base de datos.

Para manejar este elemento:

1.- Es un metodo sencillo, primero subir las imagenes ( de preferencia jpg) con un ftp normal a tusitio y al folder principal de el servidor, en este caso ROOT ( para el lws).

2.- Usar el tag <img src> de html EN EL PROGRAMA jsp.

3.- agregar un campo de string llamado fotourl o foto o url a el registro en el archivo secuencial y cargarlo con el nombre de la imagen por ejemplo pato.jpg, MUCHO OJO este paso exije que se tengan que reconstruir todos los programas anteriores para incluir este nuevo campo y volver a crear los archivos de ejemplos.

prog24.jsp

<%@ page import="java.io.*" %>

<%

// declarando

int clave=0;int claveb=0;String nombre=""; float estatura=0;String foto="";

Page 65: Tutorial JSP

// creando un objeto de tipo archivo

DataInputStream archivo = null;

if(request.getParameter("BUSCAR") != null)

{

// construyendo tabla html

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th><th>FOTOGRAFIA</TH></TR>");

// capturando clave a buscar

claveb=Integer.parseInt(request.getParameter("CLAVEB"));

try {

// abriendo archivo

archivo = new DataInputStream(new FileInputStream("c:\\archivo1.dat"));

while(true){

clave=archivo.readInt();

nombre=archivo.readUTF();

estatura=archivo.readFloat();

foto=archivo.readUTF();

if (claveb==clave){

out.println("<TR>");

out.println("<TD>"+clave+"</TD>");

out.println("<TD>"+nombre+"</TD>");

out.println("<TD>"+estatura+"</TD>");

out.println("<TD><img src=http:\\\\localhost\\progs\\"+foto+"></TD>");

out.println("</TR>");

} } }

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

archivo.close();

};

Page 66: Tutorial JSP

// construyendo forma dinamica

out.println("<FORM ACTION=prog24.jsp METHOD=post>");

out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar><BR>");

out.println("</FORM>");

%>

nota:

Observar que en img src debe ir la dirección internet del servidor por ejemplo http:\\misitio.com\pato.jpg, sin embargo en el programa se esta usando http:\\\\localhost\\pato.jpg, en cuanto a localhost se puede sustituir por el dominio ejemplo laurosoto.com, y en cuanto porque se usaron cuatro \\recordar que en java dentro de una string las secuencias de escape ( \a, \r etc) van precedidas del simbolo \, por esa causa para mandar un \ a la pagina se tiene que usar la secuencia de escape y como la dirección incluia al principio y una diagonal \ al final se mandaron \\y respectivamente.

corrida:

Page 67: Tutorial JSP

TAREAS PROGRAMACION JAVA JSP

CONSTRUIR UN SISTEMA COMPLETO QUE TENGA TODOS LOS PROCESOS VISTOS, PUEDEN SELECCIONAR, REFACCIONARIAS, JOYERIAS, VIDEOS, ETC.

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 2: JAVA JSP CREACION ARCHIVOS DIRECTOS DISCO

En este proceso se pretende solamente crear un archivo directo en disco.

Prog25 jsp

<%@ page import="java.io.*" %>

<%

// creando e inicializando los campos del registro

// observar que se debe usar clases numericas apropiadas

int clave=0;

Page 68: Tutorial JSP

String nombre="";

int edad=0;

if(request.getParameter("CREAR") != null)

{

// abriendo archivo, capturando y grabando datos

try {

//* Creando y grabando a un archivo*/

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

archivo.close();

} catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

catch (IOException ioe) { /* Error al escribir */ }

// avisando

out.println("ARCHIVO DIRECTO CREADO");

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog25.jsp METHOD=post>");

out.println("<INPUT TYPE=SUBMIT NAME=CREAR VALUE=\"CREACION ARCHIVO\" ><BR>");

out.println("</FORM>");

%>

corrida:

Page 69: Tutorial JSP

Recordar que la estructura que se uso para crear el archivo se debera usar siempre y con el mismo orden cuando se acceda al archivo con los procesos u operaciones anteriormente mencionados.

Observar que es parecido a la creación de archivos secuenciales.

Lo primero que se crea es un objeto de tipo FILE que se usa como parametro para crear el archivo de tipo RANDOMACCESSFILE.

Respetar las dos diagonales en el path del disco duro donde quedara el archivo directo.

Observar el doble diagonal() en el parametro. Como segundo paso se crea el archivo con la instruccion: RandomAccessFile archivo=new RandomAccessFile(arch,”rw”); El primer parametro o argumento en esta función es la unidad de disco y el nombre del archivo. El segundo parametro o argumento es llamado modo y es una de los varios modos que podemos usar. “r” → Lectura. “w” → Escritura. “rw” → Crea para lectura y escritura y si ya existe, sobreescribe. Cuando se ha finalizado de escribir al archivo se debe cerrar y esto se hace con la instrucción: Archivo.close(); Recordar estudiar todos los metodos de la clase RANDOMACCESFILE. TAREAS PROGRAMACION JAVA JSP Crear archivos directos de alumnos, provedores, libros, productos, peliculas.

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 3: GRABACION Y LECTURA DISCO JAVA JSP

Estos dos procesos son los casos mas comunes y frecuentes que se pueden realizar con un archivo de disco.

GRABACION DE UNA ESTRUCTURA A UN ARCHIVO EN DISCO

Prog26.jsp

<%@ page import="java.io.*" %>

Page 70: Tutorial JSP

<%

// creando e inicializando los campos del registro

int clave=0;

String nombre="";

int edad=0;

if(request.getParameter("GRABAR") != null)

{

// abriendo archivo, capturando y grabando datos

try {

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

// capturando registro

clave=Integer.parseInt(request.getParameter("CLAVE"));

nombre=request.getParameter("NOMBRE");

edad=Integer.parseInt(request.getParameter("EDAD"));

// procesando la string para que quede de tamano fijo

if (nombre.length() < 25)

{ for(int i=nombre.length(); i <25; i++)

nombre=nombre+" ";}

else{ nombre=nombre.substring(0,25); };

// mandando el apuntador interno del archivo

// al final del archivo

if (archivo.length()!= 0){archivo.seek( archivo.length() );};

// grabando registro

archivo.writeInt(clave);

archivo.writeChars(nombre);

archivo.writeInt(edad);

// cerrando archivo

archivo.close();

} catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

Page 71: Tutorial JSP

catch (IOException ioe) { /* Error al escribir */ }

// avisando

out.println("REGISTRO INSERTADO");

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog26.jsp METHOD=post>");

out.println("CLAVE :<INPUT TYPE=TEXT NAME=CLAVE><BR>");

out.println("NOMBRE :<INPUT TYPE=TEXT NAME=NOMBRE><BR>");

out.println("EDAD :<INPUT TYPE=TEXT NAME=EDAD><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=GRABAR VALUE=INSERTAR ><BR>");

out.println("</FORM>");

%>

corrida:

Observar que es completamente similar a programa de archivos secuenciales, solo que es necesario que se usen las claves con la secuencia 0,1,2,3,4,5…..

La primera observación es que se esta usando el modo “rw”, reestudiar la clase de modos de apertura.

Recordar que un archivo directo tiene un tamaño de registro predifinido y es importante qu dicho tamaño se respete, para el caso de las variables strings dentro del codigo se estan ajustando a 25 caracteres, si la string es mas corta que dicho tamaño se

Page 72: Tutorial JSP

tendra que ampliar con caracteres en blanco ” ”, si el tamaño es mas grande la string se tendra que recortar con el metodo substring(), como se muestra en el programa ejemplo.

Tambien es importante recordar que java grabara cada caracter de la string usando dos(2) bites en disco, es decir el registro ejemplo quedara grabado en disco en 58 BYTES, 50 para la string y 4 bytes por cada entero, es importante conocer el tamaño de registros grabados en disco porque esta información se usara ampliamente en el resto de los programas de esta unidad.

Las metodos de grabación que se estan usando son:

Archivo.writeInt() y archivo.writeChars().

Recordar estudiar todos los metodos de la clase RANDOMACCESSFILE.

LECTURA CONSULTA DESPLIEGUE DE REGISTROS

Prog27.jsp

<%@ page import="java.io.*" %>

<%

// creando e inicializando los campos del registro

int clave=0;

String nombre="";

int edad=0;

// se ocupa el tamano del registro

// y recordar que cada carcater de la string, java lo almacena en dos bytes

// en total la string de 25 caracteres se almacenara en 50 bytes

// mas dos ints de 4 bytes c/u nos da en total

long treg=58;

if(request.getParameter("OK") != null)

{

// abriendo archivo

try {

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

// calculando cantidad de registros

Page 73: Tutorial JSP

long creg=archivo.length()/treg;

// empezando tabla html para desplegar

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th></TR>");

// iniciando ciclo lectura archivo

for (long r=0; r < creg; r++)

{

// leyendo el registro

clave=archivo.readInt();

//leyendo string

for(int i = 0; i < 25; ++i)

{ nombre += archivo.readChar(); };

edad=archivo.readInt();

// desplegando en tabla html

out.println("<TR>");

out.println("<TD>"+clave+"</TD>");

out.println("<TD>"+nombre+"</TD>");

out.println("<TD>"+edad+"</TD>");

out.println("</TR>");

**// limpiar string o java la encadena en la siguiente lectura**

nombre="";

}; // termina for

// fin tabla y cierre archivo

out.println("</table>");

archivo.close();

} catch(FileNotFoundException fnfe) { }

catch (IOException ioe) { }

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog27.jsp METHOD=post>");

Page 74: Tutorial JSP

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=desplegar ><BR>");

out.println("</FORM>");

%>

corrida:

notas:

Primero se ocupa conocer la cantidad de registros que se encuentran almacenados en disco, para esto primero se ocupan dos variables de tipo long treg y creg, la cantidad de registros se obtiene con la operación y metodos de la clase RANDOMACCESSFILE siguientes:

creg=archivo.length()/treg;

Creo que esta muy claramente entendible como se consiguio la cantidad de registros, ya con esta información se construye un ciclo for (puede ser cualquiera de los ciclos vistos) para empezar a recorrer renglon tras renglon del archivo directo.

La unica nota a mencionar es que para leer la string se esta usando un ciclo de lectura de 25 caracteres y recordar al final poner la string en nada =”” porque si no en la siguiente lectura se tendra la string encadenada a la siguiente string.

TAREAS PROGRAMACION JAVA JSP

1.- Cargar y Leer los archivos pedidos en el tema anterior.

Page 75: Tutorial JSP

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 4: BUSQUEDA JAVA JSP

En este tema se analiza la busqueda 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 busqueda generalmente la clave del registro.

Recordar que en esta operación se muestra la diferencia fundamental entre archivos secuenciales y archivos directos, es decir aqui si se puede acceder directamente un registro n cualesquiera.

Prog28.jsp

.

<%@ page import="java.io.*" %>

<%

// creando e inicializando los campos del registro

int clave=0;

String nombre="";

int edad=0;

// se ocupa el tamano del registro

// y recordar que cada char de la string , java la almacena en dos bytes

// en total la string de 25 se almacena en 50 bytes

// mas dos ints de 4 bytes c/u nos da en total

long treg=58;

if(request.getParameter("BUSCAR") != null)

{

// capturando clave de busqueda

int claveb=Integer.parseInt(request.getParameter("CLAVEB"));

// abriendo archivo

try {

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

// moviendo apuntador interno a posicion deseada

Page 76: Tutorial JSP

archivo.seek(claveb * treg);

// leyendo registro

clave=archivo.readInt();

//leyendo la string 25 caracteres

for(int i = 0; i < 25; ++i)

{ nombre += archivo.readChar(); };

edad=archivo.readInt();

//desplegando en tabla html

// construyendo tabla html

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th></TR>");

out.println("<TR>");

out.println("<TD>"+clave+"</TD>");

out.println("<TD>"+nombre+"</TD>");

out.println("<TD>"+edad+"</TD>");

out.println("</TR></table>");

// limpiar la string o java encadena con la siguiente busqueda

nombre="";

// cerrando archivo

archivo.close();

} catch(FileNotFoundException fnfe) { }

catch (IOException ioe) { }

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog28.jsp METHOD=post>");

out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar ><BR>");

out.println("</FORM>");

%>

corrida:

Page 77: Tutorial JSP

Como se desprende del programa usando archivo.seek() es posible posicionarse en cualquier byte del archivo.

El formato usado seek() es:

Archivo.seek1);

Recordar que debemos posicionar el apuntador interno de registros, al principio o inicio del registro que se quiere, por ejemplo en este ejemplo el inicio del registro (1 juan perez 22) se encuentra en el byte 59, pero java inicia una lectura o una escritura en el BYTE ANTERIOR para este caso la lectura debe tener el apuntador interno de registros en el BYTE 58, y si se multiplica la clave 1 por el tamaño de registro 58, adivinar que BYTE SE OBTIENE.

Como va a estar dificil que se le atine a un byte determinado, es por eso que en el programa mejor se deja que sea el propio servidor quien calcule el byte donde empieza un registro determinado usando la formula algebraica (clave * tamaño de registro).

TAREAS PROGRAMACION JAVA JSP

Construirles programas de busquedas a los archivos ya construidos.

1) long)(clave)* tamañoderegistro 

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 5: FILTROS CONDICIONES JAVA JSP

Page 78: Tutorial JSP

Otro problema similar al anterior es el de filtros o condiciones, es decir en muchas ocasiones es necesario obtener información acerca de un subconjunto de renglones de el archivo.

Por ejemplo todos los estudiantes que sean mayores de 17 años, o todos los clientes que sean de Tijuana, etc. a esto le llamamos filtros o condiciones.

Tambien se resuelve de manera similar a los de archivos secuenciales es decir usando un ciclo de lectura de todo el archivo e ir desplegando todos los registros que cumplan la condicion.

Prog29.jsp

<%@ page import="java.io.*" %>

<%

// creando e inicializando los campos del registro

int clave=0;

String nombre="";

int edad=0;

long treg=58;

if(request.getParameter("FILTRAR") != null)

{

// abriendo archivo

try {

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

// calculando cantidad de registros

long creg=archivo.length()/treg;

// empezando tabla html para desplegar

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th></TR>");

// capturando condicion de busqueda

int edadb=Integer.parseInt(request.getParameter("EDADB"));

// iniciando ciclo lectura archivo

for (long r=0; r < creg; r++)

Page 79: Tutorial JSP

{

// leyendo los registros

clave=archivo.readInt();

//leyendo string

for(int i = 0; i < 25; ++i)

{ nombre += archivo.readChar(); };

edad=archivo.readInt();

// desplegando en tabla html incluyendo condicion

if (edad >= edadb)

{ out.println("<TR>");

out.println("<TD>"+clave+"</TD>");

out.println("<TD>"+nombre+"</TD>");

out.println("<TD>"+edad+"</TD>");

out.println("</TR>");

// limpiando string

nombre="";

};

//limpiando string otra vez

nombre="";

}; // termina if y for

// fin tabla y cierre de arcgivo

out.println("</table>");

archivo.close();

} catch(FileNotFoundException fnfe) { }

catch (IOException ioe) { }

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog29.jsp METHOD=post>");

out.println("EDAD >= <INPUT TYPE=TEXT NAME=EDADB><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=FILTRAR VALUE=filtrar ><BR>");

Page 80: Tutorial JSP

out.println("</FORM>");

%>

corrida:

Como se observa es un problema y una solución similar al tema anterior de busquedas.

TAREAS PROGRAMACION JAVA JSP

HACERLES PROGRAMAS DE FILTRADO A LOS ARCHIVOS ANTERIORES

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 6: JAVA JSP BAJAS O ELIMINACIONES

Eliminación o bajas es el proceso por medio del cual algunos registros del archivo son purgados del archivo, existen dos maneras por las cuales se puede realizar ese proceso.

En la primera manera se usan dos archivos, el archivo original y un archivo temporal, el procedimiento o algoritmo es muy sencillo, se lee el registro del archivo original y si no es el registro a eliminar entonces se almacena en el archivo temporal, cuando se termina de procesar todo el archivo original, el archivo temporal solo contendra todos los registros que no se quisieron eliminar, ya con estos dos archivo se procede a eliminar o borrar usando las instrucciones vistas en el capitulo anterior y se procede a renombrar usando la instrucciónes vistas sobre el archivo temporal como nuevo archivo original.

Sin embargo en archivos directos no se puede ni se debe eliminar fisicamente registros de los archivos, porque recordar, que la clave del registro esta enlazada directamente a

Page 81: Tutorial JSP

la posición que dicho registro tiene en disco y no seria muy conveniente estarle cambiando la matricula al alumno cada rato o el numero de serie al auto, etc.

Aparte de que con esta manera de eliminar incluso fisicamente los registros del archivo es que no hay manera de recuperar esa información posteriormente.

Es por eso que otra tecnica común de eliminación es incluir un campo de estado, status o bandera o semaforo en el registro y conforme se va cargando el registro y antes de mandarlo a disco se le agrega a dicho campo el caracter 'A' –>alta, asi que cuando se quiera una baja solo se pondria dicho campo en 'B' y todos los programas de lectura, busqueda y filtros deberan revisar esta campo de estado antes de hacer algo con el registro.

TAREAS PROGRAMACION JAVA JSP

Construir programas de eliminacion usando el metodo de bajas logicas como se indica en el ultimo parrafo para los archivos construidos.

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 7: JAVA JSP OPERACIONES CON CAMPOS

En este tema se analiza la manera de poder realizar operaciones o procesos con los campos de los registros en el archivo directo, lo unico importante a considerar es que los campos del registro son en cierta medida igual que variables normales y por tanto se pueden procesar de manera normal como lo muestra el ejemplo.

prog30 jsp

<%@ page import="java.io.*" %>

<%

// creando e inicializando los campos del registro

int clave=0;

String nombre="";

int edad=0;

long treg=58;

if(request.getParameter("OK") != null)

{

// abriendo archivo

try {

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

Page 82: Tutorial JSP

// calculando cantidad de registros

long creg=archivo.length()/treg;

// iniciando ciclo lectura archivo

for (long r=0; r < creg; r++)

{

// leyendo registro

clave=archivo.readInt();

//leyendo string

for(int i = 0; i < 25; ++i)

{ nombre += archivo.readChar(); };

edad=archivo.readInt();

// realizando operacion

edad=edad + 100;

//regresando apuntador y regrabando con cambio

archivo.seek( archivo.getFilePointer() -treg);

archivo.writeInt(clave);

archivo.writeChars(nombre);

archivo.writeInt(edad);

// limpiando string

nombre="";

};

archivo.close();

// avisando

out.println(" PROCESO CONCLUIDO ");

} catch(FileNotFoundException fnfe) { }

catch (IOException ioe) { }

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog30.jsp METHOD=post>");

out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=EDAD+100 ><BR>");

Page 83: Tutorial JSP

out.println("</FORM>");

%>

corrida

corrida programa despliegue:

como se observa la solución es muy sencilla solo se ocupa:

1.- leer fread() el registro, esto mueve el apuntador al siguiente registro.

2.- modificar registro

Page 84: Tutorial JSP

3.- regresar a posición anterior con seek()

4.- grabar el registro corregido

y no se ocupan los dos archivos como en el caso secuencial.

TAREAS PROGRAMACION JAVA JSP

CONSTRUIRLES PROGRAMAS QUE PROCESEN ALGUNOS CAMPOS DE LOS ARCHIVOS EJEMPLOS QUE YA TIENEN CONSTRUIDOS.

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 8: EDICION MODIFICACION DE REGISTROS JAVA JSP

Modificar o editar un registro es uno de los procesos mas comunes con archivos en disco, generalmente despues de un fuerte proceso de captura de registros, una revisión o consulta general muestra muchos de ellos con errores de captura.

La primera parte del programa es el programa normal de busqueda que ya se construyo en temas anteriores, pero al desplegar el registro se debera construir una forma dinamica que incluya los datos a modificar del registro.

La segunda parte del programa toma los datos, los almacena en el registro en memoria luego se posiciona en el registro en disco a modificar con seek() y se regraban con write().

Prog31.jsp

<%@ page import="java.io.*" %>

<%

// creando e inicializando los campos del registro

int clave=0;

String nombre="";

int edad=0;

long treg=58;

if(request.getParameter("BUSCAR") != null)

{

// capturando clave de busqueda

int claveb=Integer.parseInt(request.getParameter("CLAVEB"));

// abriendo archivo

try {

Page 85: Tutorial JSP

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

// moviendo apuntador interno a posicion deseada

archivo.seek(claveb * treg);

// leyendo registro

clave=archivo.readInt();

//leyendo la string 25 caracteres

for(int i = 0; i < 25; ++i)

{ nombre += archivo.readChar(); };

edad=archivo.readInt();

//desplegando en su propia forma y controles dinamicos

if (claveb==clave)

{

out.println("<FORM ACTION=prog31.jsp METHOD=post>");

out.println("CLAVE :"+clave+"<BR>");

out.println("NUEVO NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE value=\""+nombre+"\"><BR>");

out.println("NUEVA EDAD :<INPUT TYPE=TEXT NAME=EDAD value="+edad+"><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=EDITAR VALUE=editar><BR>");

out.println("<INPUT TYPE=HIDDEN NAME=CLAVEB value="+claveb+"><BR>");

out.println("</FORM>");

};

// limpiando string

nombre="";

// cerrando archivo

archivo.close();

} catch(FileNotFoundException fnfe) { }

catch (IOException ioe) { }

}; // fin metodo buscar

// codigo de metodo EDICION

Page 86: Tutorial JSP

String temp2=request.getParameter("EDITAR");

if(temp2==null)temp2=" ";

if(temp2.compareTo("editar")==0)

{

// capturando los nuevos datos

clave=Integer.parseInt(request.getParameter("CLAVEB"));

nombre=request.getParameter("NOMBRE");

edad=Integer.parseInt(request.getParameter("EDAD"));

// procesando la string para que quede de tamano fijo

if (nombre.length() < 25)

{ for(int i=nombre.length(); i <25; i++)

nombre=nombre+" ";}

else{ nombre=nombre.substring(0,25); };

//* abriendo archivo */

try {

File archt=new File("c:\\archivo2.dat");

RandomAccessFile archivot=new RandomAccessFile(archt,"rw");

// posicionando en registro a modificar

archivot.seek(clave * treg);

// regrabando

archivot.writeInt(clave);

archivot.writeChars(nombre);

archivot.writeInt(edad);

// cerrando archivo

archivot.close();

} catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

catch (IOException ioe) { /* Error al escribir */ }

// avisando

out.println("REGISTRO EDITADO");

};

// construyendo forma dinamica

Page 87: Tutorial JSP

out.println("<FORM ACTION=prog31.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>");

%>

Corrida

corrida

Page 88: Tutorial JSP

corrida

La unica instrucción nueva en este tema es que se usan dos variables de tipo FILE y RANDOMACCESSFILE una de ellos para controlar la busqueda y la otra para controlar la modificación en disco, asimismo se uso un campo hidden para pasar la información a el submit EDITAR.

TAREAS PROGRAMACION JAVA JSP

CONSTRUIRLES PROGRAMAS DE EDICION O MODIFICACION A LOS ARCHIVOS YA CONSTRUIDOS.

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 9: GRAFICOS JAVA JSP

Campos de graficos o de imagenes se han convertido en elementos importantes de cualquier base de datos.

Para manejar este elemento:

1.- Es un metodo sencillo primero subir las imagenes ( de preferencia jpg) con un ftp normal a tusitio y al folder principal de el servidor, en este caso ROOT ( para el lws).

2.- Usar el tag <img src> de html EN EL PROGRAMA jsp.

3.- agregar un campo de string llamado fotourl o foto o url a el registro en el archivo secuencial y cargarlo con el nombre de la imagen por ejemplo pato.jpg, MUCHO OJO este paso exije que se tengan que reconstruir otra vez todos los programas anteriores para incluir este nuevo campo y volver a crear los archivos de ejemplos.

Page 89: Tutorial JSP

Prog32.jsp

<%@ page import="java.io.*" %>

<%

// creando e inicializando los campos del registro

int clave=0;

String nombre="";

int edad=0;

String foto="";

long treg=108;

if(request.getParameter("BUSCAR") != null)

{

// capturando clave de busqueda

int claveb=Integer.parseInt(request.getParameter("CLAVEB"));

// abriendo archivo

try {

File arch=new File("c:\\archivo2.dat");

RandomAccessFile archivo=new RandomAccessFile(arch,"rw");

// moviendo apuntador interno a posicion deseada

archivo.seek(claveb * treg);

// leyendo registro

clave=archivo.readInt();

//leyendo NOMBRE

for(int i = 0; i < 25; ++i)

{ nombre += archivo.readChar(); };

edad=archivo.readInt();

//leyendo FOTO

for(int i = 0; i < 25; ++i)

{ foto += archivo.readChar(); };

//desplegando en tabla html

out.println("<HTML><TABLE Border=10 CellPadding=5><TR>");

Page 90: Tutorial JSP

out.println("<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>ESTATURA</th><th>FOTOGRAFIA</TH></TR>");

out.println("<TR>");

out.println("<TD>"+clave+"</TD>");

out.println("<TD>"+nombre+"</TD>");

out.println("<TD>"+edad+"</TD>");

out.println("<TD><img src=http:\\\\localhost\\progs\\"+foto+"></TD>");

out.println("</TR></table>");

// limpiando string

nombre="";

// cerrando archivo

archivo.close();

} catch(FileNotFoundException fnfe) { }

catch (IOException ioe) { }

};

// construyendo forma dinamica

out.println("<FORM ACTION=prog32.jsp METHOD=post>");

out.println("CLAVE BUSCAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");

out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=buscar ><BR>");

out.println("</FORM>");

%>

nota:

Observar que en img src debe ir la dirección internet del servidor por ejemplo http:\\misitio.com\pato.jpg, sin embargo en el programa se esta usando http:\\\\localhost\\pato.jpg, en cuanto a localhost se puede sustituir por el dominio ejemplo laurosoto.com, y en cuanto porque se usaron cuatro \\recordar que en java dentro de una string las secuencias de escape ( \a, \r etc) van precedidas del simbolo \, por esa causa para mandar un \ a la pagina se tiene que usar la secuencia de escape y como la dirección incluia al principio y una diagonal \ al final se mandaron \\y respectivamente.

corrida:

Page 91: Tutorial JSP

TAREAS PROGRAMACION JAVA JSP

CONSTRUIR UN SISTEMA INFORMACION COMPLETO QUE TENGA TODOS LOS PROCESOS VISTOS, PUEDEN SELECCIONAR, REFACCIONARIAS, JOYERIAS, VIDEOS, ETC.

UNIDAD 7: JAVA JSP INT A LAS BASES DE DATOS

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 indico 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.

Page 92: Tutorial JSP

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.

Salta a la vista que construir un sistema de información por ejemplo para una tienda de vídeo o para un refaccionaria etcetera, 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, mas 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 esta 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 esta 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 esta haciendo para darlos de alta en disco.

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

No confundir este concepto de tablas en base de datos con el concepto de tablas vistos en el capitulo de arreglos.

Page 93: Tutorial JSP

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

UNIDAD 7: JAVA JSP INT A LAS BASES DE DATOS

TEMA 3: JAVA JSP 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

Tabla Proveedor:

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.

Page 94: Tutorial JSP

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 MATERIAL 1 JEANS SPORT GRANDE AZUL ALGODON 2 VOLIS VESTIR MEDIANA NEGRA POLIESTER 3 GENERICA CAMISETA LARGA MORADO RARON

Tabla: Clientes

NUMCLIENTE NOMCLIENTE DIRCLIENTE TELCLIENTE 1 JUAN PEREZ AV ABA 2233 2345678 2 LUIS SANCHEZ CALLE ZETA 3434 4567899 3 ROSA MARES CALLEJON NORTE 567890

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 PROGRAMACION 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

Page 95: Tutorial JSP

10.- BANCOS

UNIDAD 7 JAVA JSP INT A LAS BASES DE DATOS

TEMA 4: JAVA JSP TABLAS (CONTINUACIÓN)

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

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 mas 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 si) residen en un servidor de bases de datos especializado en algun lugar cercano o lejano en una red chica, mediana o grande.

Otros paquetes o software mas pequeños y comunes tambien 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.

Usaremos Microsoft Access 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 si.

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 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 mas adelante para ordenar de manera diferente la tabla, es decir una tabla en principio ya está ordenada por

Page 96: Tutorial JSP

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 programa correspondiente para su creación y almacenamiento, en este caso Microsoft Access.

UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS

TEMA 5: JAVA JSP MICROSOFT ACCESS

En este ejercicio construiremos una base de datos llamada mibase que solo contendra una tabla llamada mitabla con tres campos que son clave, nombre y edad mismos que se estaran usando a lo largo de esta unidad a manera de ejemplo.

Se usa Access97 en virtud de que es el mas sencillo de todas las versiones aunque se puede usar cualquier version sin embargo solo se responde por access97.

PROCEDIMIENTO:

1.- Cargar Access y sale la siguiente pantalla:

2.- Usar la opcion FILE–>NEW DATABASE y seleccionar de la pantalla que sale BLANK DATABASE.

Page 97: Tutorial JSP

3.- Inmediatamente ACCESS pregunta donde se almacenara y como se llamara la base de datos usando la pantalla normal de grabación de archivos:

4.- Ponerla en un lugar o folder adecuado y para este ejemplo llamarla mibase (como se ve en la pantalla de arriba), usar el boton create.

5.- Aparece ahora la siguiente pantalla:

6.- Esta ultima pantalla permite construir una o mas tablas que contendra la base de datos (mibase), observar que tambien permite agregarle mas elementos a una base de datos (querys, forms, reports, etc, esperar un curso de estos en programacionfacil) pero para este ejercicio solo agregar una tabla ( que se llamara mitabla) a la base de datos, para crear mitabla solo usar el boton new y Access ofrecera construirla de varias maneras distintas de preferencia seleccionar la manera DESIGN VIEW que les mandara la siguiente pantalla:

Page 98: Tutorial JSP

7.- En FIELD NAME escibimos el nombre del campo, en DATA TYPE solo click y salen las opciones de los diversos tipos de datos que ofrece access, en DESCRIPTION se puede poner una descripcion de los propositos del campo, para el ejemplo que se esta mostrando se usa number para la clave, texto con tamaño 30 caracteres (seleccionar abajo) para nombre y number para edad.

8.- Observar que CLAVE tiene una pequeña llave a un lado, esto significa que CLAVE es la llave primaria de la tabla, para marcarla como llave primaria primero seleccionar todo el renglón haciendo un click en el cuadrito gris que esta antes de la palabra clave y luego hacer un click derecho y del minimenu que sale usar opcion primary key, es muy importante que el tipo de dato de la clave sea de tipo NUMBER. Aunque tambien puede ser autonumber.

9.- Ahora cerrar la tabla usando la [x] de arriba y access preguntara con que nombre se llamara la tabla, ponerle mitabla.

10.- Ahora se regresa a la vista de diseño de Access y ya estara registrada mitabla en mibase, como lo muestra el sigiente grafico:

Page 99: Tutorial JSP

11.- Usar ahora boton OPEN, para cargar unos cuantos datos o renglones de prueba como lo muestra el siguiente ejemplo:

12.- Cerrar el access con la [x] de arriba y si dios quiere ya se tiene construida MIBASE.MDB que a su vez contiene MITABLA que a su vez contiene unos cuantos renglones de datos.

13.- El ultimo paso es subirla a tu sitio mibase.mdb para que ya este lista y preparada para procesarla con ASP NET y JAVA JSP

 

UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS

TEMA 6: JDBC SQL RESULTSET

EL MODELO DE DATOS DE JAVA DESCANSA EN UNA SERIE DE OBJETOS ESPECIALIZADOS QUE FACILITAN EL PROCESAMIENTO DE UNA BASE DE DATOS.

Empezando:

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 realize 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.

La primera nota a recordar es que una base de datos puede estar fisicamente en el servidor y en algun folder o directorio del disco duro de dicha maquina servidora por ejemplo, c:\pfacil\misitio\mibase.mbd, como se observa la base que se construyo en access (mibase.mbd) se almaceno en el disco c en el folder pfacil y dentro del subfolder misitio.

Sin embargo tambien es necesario conocer que asi como existen servidores de paginas (web server), servidores de correo (mail server), servidores de ftp (ftp server), etc, tambien existen servidores de bases de datos (database server), los mas comunes son el sqlserver de microsoft, oracle, mysql, etc, estos servidores tambien pueden crear, administrar y procesar una base de datos por supuesto que el procedimiento que se dio para crearla en access en el tema anterior no se puede usar para crear y cargar una base de datos en un servidor de bases de datos.

Page 100: Tutorial JSP

El modo de comunicarse entre nuestro programa o aplicación y la base de datos (ya sea fisica o un dbserver) implica que ambos manejen un lenguaje de programación comun, es decir no se puede mandar una instrucción en csharp, o en basic o pascal a la base de datos y ademas esperar que esta ultima la entienda ( para entender esto, una razon muy sencilla es que la base de datos tendria que conocer o comprender todos los lenguajes de programación), para resolver este problema de comunicación es que se usa un lenguaje comun de bases de datos que tanto los lenguajes de programación existentes como las bases de datos entienden, este lenguaje comun de bases de datos es el SQL (structured query languaje) o lenguaje estructurado de consultas.

En otras palabras ustedes mis estimados lectores tendran que aprender este nuevo lenguaje de programación, el SQL, la buena noticia es que es un lenguaje con muy pocas instrucciones y ademas existen muy buenos tutoriales en internet que hay que buscar y estudiar.

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.

OBJETO JDBCODBCDRIVER:- Objeto que se utiliza para traducir las instrucciones del lenguaje SQL a las instrucciones del lenguaje original de la base de datos.

OBJETO CONNECTION:- OBJETO QUE SE UTILIZA PARA ESTABLECER UNA CONECCION O ENLACE A LA BASE DE DATOS.

OBJETO RESULTSET:- Es la representación en memoria de una 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 realizen con la tabla (insertar registros, eliminar registros, etc) se realizaran realmente contra un resulset y no provocaran ningun cambio en la tabla fisica en disco, resulset tiene un conjunto de metodos muy utiles y muy usados para el proceso de los renglones de la tabla virtual.

OBJETO STATEMENT:- Este objeto y sus dos metodos executequery(solo para select de sql) y executeupdate( solo para insert, update y delete de sql) son los metodos que se utilizaran para comunicarse con la tabla fisica en disco.

Ejemplo:

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/progfacil/lauro/mibase.mdb";

String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;

Page 101: Tutorial JSP

try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};