Anda di halaman 1dari 193

Tutorial Jsp Java Server Pages Incluye programas tareas ejemplo y aplicacion arreglos archivos Access y Mysql.

UNIDAD 1: JAVA JSP ELEMENTOS BASICOS 1.- INTRODUCCION 2.- MODELO DE SOLUCION 3.- VARIABLES 4.- TIPOS DE DATOS 5.- CLASES NUMERICAS 6.- OPERADORES ARITMETICOS 7.- OPERADOR CAST Y CONVERSIONES 8.- JERARQUIA DE OPERACIONES 9.- APLICACIONES 91.- REQUISITOS WEB PROGRAMACION 10.- CONCEPTOS BASICOS DE OOP 11.- JAVA SERVER PAGE (1) APENDICE: OBJETOS HTML APENDICE: PALABRAS RESERVADAS JAVA UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA 1.- INTRODUCCION 2.- INSTRUCCIONES DE CONTROL DE PROGRAMA 3.- INSTRUCCIONES CONDICIONALES 4.- CONDICIONES SIMPLES 5.- OPERADORES RELACIONALES 6.- INSTRUCCION IF 7.- CONDICIONES COMPUESTAS 8.- INSTRUCCION SWITCH 9.- CONTROL SELECT 10.- CONTROL CHECKBOX Y MANEJO DE EXEPCIONES 11.- CONTROL RADIOBUTTON 12.- CICLO FOR 13.- CICLO WHILE 14.- CICLO DO...WHILE 15.- CONCLUSIONES ACERCA DE CICLOS UNIDAD 3: JAVA JSP ARREGLOS 1.- INTRODUCCION 2.- ARREGLOS TRADICIONALES 3.- ARREGLOS TIPO LISTA 4.- ARREGLOS TIPO TABLA UNIDAD 4: JAVA JSP FUNCIONES Y PROCEDIMIENTOS 1.- PROCEDIMIENTOS Y FUNCIONES 2.- PARAMETROS 3.- VARIABLES LOCALES Y GLOBALES 4.- FUNCIONES 5.- ARREGLOS COMO PARAMETROS UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES 1.- INTRODUCCION 2.- ESTRUCTURAS O REGISTROS 3.- ARCHIVOS (1) 4.- ARCHIVOS (2) 5.- CREACION ARCHIVOS 6.- GRABACION Y LECTURA DISCO 7.- BUSQUEDA EN ARCHIVO DIRECTO 8.- FILTROS o CONDICIONES 9.- BAJA o ELIMINACION 10.- OPERACIONES CON CAMPOS 11.- EDICION o MODIFICACION REGISTROS

12.- GRAFICOS UNIDAD 6: JAVA JSP ARCHIVOS DIRECTOS 1.- INTRODUCCION ARCHIVOS DIRECTOS 2.- CREACION ARCHIVOS 3.- GRABACION Y LECTURA DISCO 4.- BUSQUEDA EN ARCHIVO DIRECTO 5.- FILTROS o CONDICIONES 6.- BAJA o ELIMINACION 7.- OPERACIONES CON CAMPOS 8.- EDICION o MODIFICACION REGISTROS 9.- GRAFICOS UNIDAD 7: JAVA JSP INT A LAS BASES DE DATOS ( MICROSOFT ACCESS ) 1.- INTRODUCCION 2.- MODELOS DE ALMACENAMIENTO DE DATOS 3.- TABLAS 4.- TABLAS (CONTINUACION) 5.- MICROSOFT ACCESS 6.- JDBC SQL RESULTSET CONNECTION 7.- SELECCION O DESPLIEGUE 8.- INSERCCION O ADICION DE REGISTROS 9.- BUSQUEDAS 10.- FILTROS 11.- OPERACIONES CON CAMPOS 12.- BAJAS 13.- EDICION DE REGISTROS 14.- GRAFICOS O IMAGENES UNIDAD 8: JAVA JSP INT A LAS BASES DE DATOS ( MYSQL ) 1.- INTRODUCCION 2.- MODELOS DE ALMACENAMIENTO DE DATOS 3.- TABLAS 4.- TABLAS (CONTINUACION) 5.- MYSQL (1) 6.- OBJETO RESULTSET MYSQL (2) 7.- SELECCION O DESPLIEGUE 8.- INSERCCION O ADICION DE REGISTROS 9.- BUSQUEDAS 10.- FILTROS 11.- OPERACIONES CON CAMPOS 12.- BAJAS 13.- EDICION DE REGISTROS 14.- GRAFICOS O IMAGENES

UNIDAD I: JAVA JSP ELEMENTOS BASICOS TEMA 1: INTRODUCCION JAVA JSP From Ugly Duckling to Swan Eli Cohen, Reconceptualizing Information Systems as a Field of the Transdiscipline Informing Science: From Ugly Duckling to Swan, Journal of Computing and Information Technology. 7 (3) 1999, 213-219 Hans Christian Anderson wrote a tale in which all the young ducks made fun of another. They made the duckling feel inadequate because he was different. One day a swan, the most beautiful of the fowl, declared that the youngster was in fact a young swan and a fine one at that. Information Systems is the field of inquiry that attempts to provide the business client with information in a form, format, and schedule that maximizes its effectiveness. Informacin y Conocimiento son los dos elementos claves del nuevo milenio ninguna sociedad podr alcanzar ni puede ignorar este nuevo esquema ya las naciones no se miden por su riqueza industrial, ni sus activos fsicos, ni por su poder militar, sino por la cantidad de informacin que produce y consume, as como por la recombinacin de informacin nueva en un conocimiento de grado superior. Nuevos sistemas de informacin, tienden a ser cada vez de mayor alcance y complejidad sobre todo cuando se toman en cuenta la nuevas necesidades de informacin y conocimiento que demandan las nuevas organizaciones. Nuevos sistemas de informacin son costosos en tiempos y recursos, la solucin moderna de sistemas de informacin exigen herramientas y metodologas que resuelvan rapida, econmica, eficiente y de manera global, problemas de informacin y conocimiento planteados por las organizaciones. Ademas el pleno potencial del hardware tampoco es aprovechado plenamente y existe un considerable retraso con el software y sus aplicaciones generando lo que se conoce como crisis del software. Nuevos paradigmas de programacion se ocupan para la creacion de nuevos sistemas y necesidades creativas de informacion. Java un lenguaje de programacion moderno implementado por la compaa www.java.sun.com a a finales de 1996, se ha convertido en el lenguaje estandar para la construccion de aplicaciones basadas en internet asi como de los nuevos modelos de programacin, tales como programacion movil, programacion para dispositivos, porgramacion para servicios web, etc. En programacin orientada a objetos ( OOP ) un programa es considerado como un sistema de objetos interactuando entre s, ambientes de desarrollo visuales facilitan aun ms la construccin de programas y solucin de problemas, porque permiten abstraer al ingeniero de software de todo el GUI (interfase grfica) del problema, que constituye ms del 60% del cdigo normal de un programa. En OOP todo problema aun aquellos sencillos de informacin, se consideran y resuelven como mdulos de cdigo gigante (clase) que contiene todo el cdigo necesario(variables, procedimientos, funciones, interfaces, etc.) para solucionar el problema. En programacion java basica, se tiene la mezcla de lo mejor de estos tres mundos, es decir construimos programas, aplicaciones y sistemas de informacion usando tecnivas estructuradas, contruyendo objetos y diseando sistemas graficos, y todo orientado a la construccin de sistemas de informacin basados en redes de cualquier tipo o tamao.

UNIDAD 1: JAVA JSP ELEMENTOS BSICOS TEMA 2: MODELO DE SOLUCIN JAVA JSP En general un problema de informacin es posible entenderlo, analizarlo y descomponerlo en todos sus componentes o partes que de una u otra manera intervienen tanto en su planteamiento como en su solucin. Una herramienta rpida que nos permite descomponer en partes un problema para su solucin es el llamado modelo de solucin, esta consiste de una pequea caja que contiene los tres elementos ms bsicos en que se puede descomponer cualquier problema sencillo de informacin, estas tres partes son: LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver el problema, estos datos son almacenados internamente en la memoria del computador en las llamadas variables de entrada. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas necesarias para solucionar el problema, generalmente esta parte del modelo es una ecuacion algebraica o formula (o igualdad matemtica, ej. X= y + 5). LA TERCERA PARTE es el resultado o solucin del problema que generalmente se obtiene de la parte de operaciones del modelo y dichos datos estn almacenados en las llamadas variables de salida. En resumen para todo problema sencillo de informacin es necesario plantearse las siguientes preguntas: Que datos ocupa conocer el computador para resolver el problema y en cuales variables de entrada se van a almacenar? Que procesos u operaciones debe realizar el computador para resolver el problema planteado? Que informacin o variables de salida se van a desplegar en pantalla para responder al problema planteado originalmente? Como nota importante no confundir los trminos datos, variables e informacin: Datos se refiere a informacin en bruto no procesada ni catalogada, por ejemplo Tijuana, calle primera # 213,15 aos, $2,520.00, etc. Variables es el nombre de una localidad o direccin interna en la memoria del computador donde se almacenan los datos, ejemplo de variables para los casos del inciso anterior, CIUDAD, DIRECCIN, EDAD, SUELDO, ETC. Informacin son datos ya procesados que resuelven un problema planteado. EJEMPLO DE MODELO DE SOLUCIN Construir un modelo de solucin que resuelva el problema de calcular el rea de un tringulo con la formula rea igual a base por altura sobre dos. Variable(s) de Entrada Proceso u Operacin BASE ALTURA Variable(s) de Salida

AREA= BASE * ALTURA / 2 AREA

PROBLEMA 2.- CONVERTIR LA EDAD EN AOS DE UNA PERSONA A MESES. PROBLEMA 3.- CONVERTIR PESOS A DLARES. PROBLEMA 4.- CALCULAR EL REA DE UN CIRCULO CON LA FORMULA

PROBLEMA 5.- EVALUAR LA FUNCIN Y = 5X-3X +2 PARA CUALQUIER VALOR DE X. Observar para el caso de constantes fijas o conocidas (PI) no se debe dar como dato de entrada su valor en cambio colocar directamente su valor dentro de la formula en la parte de operaciones del problema. Pero recordar tambin que existirn problemas sencillos donde: No se ocupan entradas o no se ocupan operaciones, pero todos ocupan salida. Una formula grande o muy compleja puede ser ms segura y fcil de resolver, si es descompuesta y resuelta en partes, juntando al final los parciales para obtener el resultado final. Un problema puede tener ms de una solucin correcta. El problema no esta suficientemente explicado o enunciado, entonces,

estudiarlo, analizarlo y construirlo de manera genrica. TAREAS PROGRAMACION JAVA JSP Construir los modelos de solucin de los siguientes problemas: PROBLEMA 6.- Convertir millas a kilmetros (caso normal) PROBLEMA 7.- Convertir 125 metros a centmetros (no ocupa entradas) PROBLEMA 8.- Se calcula que en promedio hay 4.7 nidos en cada rbol en la UABC, tambin se calcula que en cada nido existen un promedio de 5.8 pjaros, se pide calcular la cantidad total de nidos y de pjaros en los 227 arboles que existen en la UABC. (no ocupa entradas) PROBLEMA 9.- La gorda Sra. Lpez y sus 8 hijos solo compran una vez al mes su mandado en conocido supermercado, en dicha tienda el kilogramo de frijol cuesta $8.75, el paquete de tortillas cuesta $3.55 y el frasco de caf vale $14.25, si solo compran de estos tres productos para su mandado, calcular su gasto total.( problema no claro) PROBLEMA 10.- Capturar y desplegar los cinco datos mas importantes de un automvil (no ocupa operaciones) PROBLEMA 11.- La distancia Tijuana - Ensenada es de 110 Kms, si un automvil la recorre a una velocidad constante de 30 millas por hora, cuanto tiempo tarda en llegar. ( 1 milla =1.609 Km.) (dos maneras correctas de resolverlo). PROBLEMA 12.-Evaluar la funcin normal). PROBLEMA 13.-Evaluar la funcin ocupa entradas). para cualquier valor de x. (caso para cuando x vale 4 . (no

UNIDAD I: JAVA JSP ELEMENTOS BSICOS TEMA 3: JAVA JSP VARIABLES Identificadores son conjuntos de letras y/o nmeros que se utilizan para simbolizar todos los elementos que en un programa son definibles por el usuario (programador o ingeniero de software) del mismo como son las variables donde se almacenan datos, funciones( pequeos mdulos con cdigo), etiquetas, clases, objetos, etc. En Java JSP una variable se define como un identificador que se utiliza para almacenar todos los datos generados durante la ejecucin de un programa. Existen ciertas reglas en cuanto a variables: Claras y con referencia directa al problema. No espacios en blanco, ni smbolos extraos en ellas. Se pueden usar abreviaturas, pero solo de carcter general.

No deben ser palabras reservadas del lenguaje. Ejemplos de buenas variables: Nombre, Edad, SdoDiario, IngMensual, Permetro, Calif1, etc. UNIDAD I: JAVA JSP ELEMENTOS BASICOS TEMA 4: JAVA JSP TIPOS DE DATOS En Java Jsp a toda variable que se use en un programa, se le debe asociar (generalmente al principio del programa) un tipo de dato especfico. Un tipo de dato define todo el posible rango de valores que una variable puede tomar al momento de ejecucin del programa y a lo largo de toda la vida til del propio programa. Los tipos de datos ms comunes en java jsp son: Primitive Data Types Keyword Description (integers) byte short int long float Byte-length integer Short integer Integer Long integer Single-precision floating point 8-bit two's complement 16-bit two's complement 32-bit two's complement 64-bit two's complement 32-bit IEEE 754 64-bit IEEE 754 16-bit Unicode character

Size/Format

(real numbers) double Double-precision floating point (other types) char A single character boolean A boolean value (true or false) true or false TABLA TOMADA DE JAVA.SUN.COM DOCUMENTATION Como se observa es muy similar a las de c o c++.

Para el caso de strings se debera usar la Clase String que tiene dos constructores, de momento entenderemos esto ultimo como dos maneras de crearse, ej; 1. String nombre= new String(); 2. String ciudad= new String(Tijuana); En este ultimo caso se crea la string y se inicializa con un dato o valor. UNIDAD I: JAVA JSP ELEMENTOS BASICOS TEMA 5: JAVA JSP CLASES ESPECIALES En java Jsp como lenguaje de programacion orientado a objetos existen aparte de la clase String vista en el tema anterior cuatro clases especiales, descendientes de la clase NUMBERS, que contienen una serie de metodos que facilitan la interaccion con los usuarios de nuestras aplicaciones en captura y despliegue de datos numericos. Sin embargo su caracteristica mas importante a tomar en cuenta, es que objetos numericos derivados de estaS clase, no pueden entrar a operaciones DIRECTAMENTE, ni recibir el resultado de operaciones.

Class Integer
public { // Fields public final static int **MAX_VALUE**; public final static int **MIN_VALUE**; // Constructors public **Integer**(int value); s); final class java.lang.Integer extends java.lang.Number

public **Integer**(String // Methods

public double **doubleValue**(); public boolean **equals**(Object public float **floatValue**(); public static Integer **getInteger**(String public static Integer **getInteger**(String public static Integer **getInteger**(String public int **hashCode**(); public int **intValue**(); public long **longValue**(); public static int **parseInt**(String s); nm); nm, int val); val); obj);

nm, Integer

public static int **parseInt**(String

s, int

radix); i);

public static String **toBinaryString**(int public static String **toHexString**(int public static String **toOctalString**(int public String **toString**(); public static String **toString**(int public static String **toString**(int i); i);

i);

i, int s); s, int

radix);

public static Integer **valueOf**(String public static Integer **valueOf**(String }

radix);

Esta clase convierte un dato de tipo int a un objeto. Este objeto contiene un solo campo de tipo int. Pero tambien el objeto contiene una serie de metodos para convertir un valor int a una String y tambien para convertir una String a int. Ademas de otros metodos de igual utilidad.

* Clase y notas tomadas directamente de java.sun

Class Double
public final class java.lang.Double extends java.lang.Number
{ // Fields public final static double **MAX_VALUE**; public final static double **MIN_VALUE**; public final static double **NaN**; public final static double **NEGATIVE_INFINITY**; public final static double **POSITIVE_INFINITY**; // Constructors public **Double**(double public **Double**(String // Methods public static long **doubleToLongBits**(double public double **doubleValue**(); value); value); s);

public boolean **equals**(Object public float **floatValue**(); public int **hashCode**(); public int **intValue**(); public boolean **isInfinite**();

obj);

public static boolean **isInfinite**(double public boolean **isNaN**(); public static boolean **isNaN**(double v);

v);

public static double **longBitsToDouble**(long public long **longValue**(); public String **toString**(); public static String **toString**(double public static Double **valueOf**(String } d); s);

bits);

* La misma fuente y las mismas notas de la clase anterior

Class Float
public { // Fields public final static float **MAX_VALUE**; public final static float **MIN_VALUE**; public final static float **NaN**; public final static float **NEGATIVE_INFINITY**; public final static float **POSITIVE_INFINITY**; // Constructors public **Float**(double public **Float**(float public **Float**(String // Methods public double **doubleValue**(); public boolean **equals**(Object obj); value); value); s); final class java.lang.Float extends java.lang.Number

public static int **floatToIntBits**(float public float **floatValue**(); public int **hashCode**(); public static float **intBitsToFloat**(int public int **intValue**(); public boolean **isInfinite**(); public static boolean **isInfinite**(float public boolean **isNaN**(); public static boolean **isNaN**(float public long **longValue**(); public String **toString**(); public static String **toString**(float public static Float **valueOf**(String } f); s); v);

value);

bits);

v);

La misma fuente y notas anteriores ====== Class Long ====== public final class java.lang.Long extends java.lang.Number { Fields public final static longMAX_VALUE; public final static value); long MIN_VALUE; Constructors public Long(long

public Long(String s); Methods public double doubleValue(); public booleanequals(Object obj); public float floatValue(); public static Long getLong(String nm); public static Long getLong(String nm, long val); public static Long getLong(String nm, Long val); public int hashCode(); public int intValue(); public long longValue(); public static long parseLong(String s); public static long parseLong(String s, int radix); public static String toBinaryString(long i); public static String toHexString(long i); public static String toOctalString(long i); public String toString(); public static String toString(long i); public static String toString(long s); public i, int static radix); public static s, int Long valueOf(String Long valueOf(String

radix); } *** La misma fuente y notas anteriores

UNIDAD 1: JAVA JSP ELEMENTOS BASICOS TEMA 6: JAVA JSP OPERADORES ARITMETICOS Un operador es un smbolo especial que indica al compilador que debe efectuar una operacin matemtica o lgica.

Java jSP reconoce los siguientes operadores aritmticos: Operador Operacin + * / % Suma Resta Multiplicacion Division Residuo o Modulo

Como notas importantes a recordar siempre; En problemas de division entre enteros, java trunca la parte residual, ej; Desplegar> 13/5 > el resultado es 2 Mas adelante se dira como resolver este problema. Para resolver los problemas de potencias y races, se usan ciertas instrucciones especiales que proporciona el lenguaje, llamadas funciones matemticas, en java existe toda una librera de instrucciones o funciones matemticas. Recordar que todas las funciones reciben uno o ms datos o valores y regresan siempre un resultado, una de estas funciones matemticas es: import java.lang.math ; public static double pow(double a, double b); Esta funcin ocupa dos valores o datos( base y exp) ambos de tipo double, y regresa un resultado tambin de tipo double, ejemplo; * resolver el problema de calcular

import java.io.*;

import java.lang.Math;

public class ejemplo1

{public static void main(String args[])

{ double base =5;

double exponente=3;

double potencia =0;

potencia = Math.pow(base, exponente);

System.out.println("potencia =" +potencia);

}// cerrar main

} //cerrar clase

Para resolver el problema de races, se aprovecha una de las mas elementales y conocida de las leyes de exponentes que dice:

Es decir una raz cualquiera se puede transformar a una potencia con un exponente fraccionario. Ejemplo: problema y = 3 x esto es equivalente a Usando la funcin pow y= 3*Math.pow(x, 0.5); entonces

* En este ejemplo no funcional se esta dando por supuesto que no interesa el tipo de dato que requiere la funcin pow() para trabajar correctamente Para realizar operaciones con objetos numericos, recordar que no se pueden hacer directamente operaciones con ellos ni tampoco pueden recibir resultados en ellos, lo que se debe hacer es usar una variable temporal de tipo apropiado, hacer la operacion con dicha variable y al final si se quiere convertir esta variable al objeto numerico apropiado(esto ultimo se vera en el siguiente tema), como lo muestra el siguiente ejemplo; Integer alfa = new Integer(20); Double zeta = new Double(5); double alfa1=0, zeta1=0; alfa1=alfa.doubleValue(); zeta1=zeta.doubleValue(); alfa1=alfa1 + zeta1; desplegar alfa1;

Como se observa se crearon dos objetos numericos, luego dos variables numericas normales, luego estas dos ultimas variables se cargan con los objetos numericos que emplean metodos propios para convertirlos a datos normales. La libreria matematica de java jsp completa incluye: Class Math public final class java.lang.Math extends java.lang.Object { Fields public final static double E; public final static double PI; Methods public static double abs(double a); public static float abs(float a); public static int abs(int a); public static long abs(long a); public static double acos(double a); public static double asin(double a); public static double atan(double a); public static double atan2(double a, double b); public static double ceil(double a); public static double cos(double a); public static double exp(double a); public static double floor(double a); public static double IEEEremainder(double f1, double f2); public static double log(double a); public static double max(double a, double b); public static float max(float a, float b); public static int max(int a, int b); public static long max(long a, long b); public static double min(double a, double b); public static float min(float a, float b);

public static int min(int a, int b); public static long min(long a, long b); public static double pow(double a, double b); public static double random(); public static double rint(double a); public static long round(double a); public static int round(float a); public static double sin(double a); public static double sqrt(double a); public static double tan(double a); } * fuente tomada de java.sun.com

UNIDAD 7: JAVA JSP ELEMENTOS BASICOS TEMA 7: JAVA JSP OPERADOR CAST y CONVERSIONES Se puede forzar un dato, variable o una expresin a convertirse o cambiarse a un nuevo tipo de dato. El operador cast realiza este proceso, es decir convierte datos, variables o expresiones a un nuevo tipo de dato, su formato es: (nvotipo) dato , var, exp; Ejemplo:

// declaracin

int alfa;

// Asignacin

alfa = 20;

// Cambio de tipo

(float) alfa;

Ejemplo: (int) 3.1416; en este ejemplo se est convirtiendo un float a int, recordar que en este caso ya no se tendrn los decimales. Como nota importante se puede hacer cast solo con tipos de datos, no entre tipos de datos y objetos de una clase numerica. Como nota importante este operador resuelve los dos problemas pendientes: 1. El de la divisin entre enteros. 2. El tipo de dato especifico que requieren las funciones. Ejemplos:
a) // Declaracin

float alfa;

// Operacin

alfa = (float)23/5;

// Pero en estos casos es preferible

alfa=23/5.0;

En toda divisin recordar agregar a uno de los dos valores el (.0), solo que los dos elementos sean variables entonces usar el operador cast con una de ellas.

b)// Declaracin

double potencia;

// Operacin

potencia = Math.pow ( (double)5, (double)3);

Como se observa en el ejemplo, se puede usar pow(), directamente con los datos, argumentos o parmetros requeridos , si estos son numricos, pero transformndolos con el operador cast. Esto tambin va a permitir evaluar expresiones matemticas de manera mas directa y sencilla, solo recordando usar un pow() por cada potencia y cada raz de la ecuacin, ejemplo: sea dentro de un programa esto se resuelve con;

// rea de declaracin de variables

double y, x;

// rea de captura de datos

capturar el valor de x;

// rea de operaciones

y = 3 * Math.pow(x, (double)3) - Math.pow(x, (1/3.0)) + 4 * Math.pow(x, (double)2));

// rea de despliegue de resultados

desplegar x, y

En Java Jsp para convertir tipos de datos numericos a objetos numericos y viseversa se deberan usar los metodos que traen las clase numericas de manera apropiada, en general existen tres casos generales difrentes,

considerando datos o variables numericas, objetos numericos y strings que es un caso especial y comun: a.1) Variable numerica a variable numerica Usar el operador cast ejemplo: var to var int alfa1=10; double alfa2=3.1416; alfa1= (int)alfa2; observar que valores decimales deben declararse como doubles a.2) variable numerica a string ejemplo; var to string int zeta=50; String alfa= String.valueOf(zeta); a.3) variable numerica a objeto numerico caso 1: usando constructor int zeta=80; Float alfa4 = new Float(zeta); caso 2: ya existe el objeto numerico Double alfa5 = new Double(0); Int zeta=30; alfa5=Double.valueOf(String.valueOf(zeta)); b.1) Objeto Numerico a Variable numerica todos los objetos numericos deben crearse inicializados aunque sea a (0) Integer alfa = new Integer(300); Int zeta = alfa.intValue(); b.2) Objeto numerico a String Float alfa = new Float(3.45); String beta = new String( ); Beta = alfa.toString(); B.3) Objeto Numerico a Objeto Numerico Integer alfa=new Integer(50); Double beta=new Double(0); beta = beta.valueOf(alfa.toString());

c.1) String to variable numerica String alfa= new String(3.5); double beta= 0; beta= Double.parseDouble(alfa); c.2) String to Objeto Numerico String alfa8=new String(50); Double alfa9=new Double(0); alfa9 = alfa9.valueOf(alfa8); TAREAS JAVA JSP POW(): 1. 2. 3. UNIDAD 1: JAVA JSP ELEMENTOS BASICOS TEMA 8: JAVA JSP JERARQUIA DE OPERACIONES En Java Jsp como en todos los demas lenguajes de programacion el problema de no tomar en cuenta la jerarqua de los operadores al plantear y resolver una operacin casi siempre conduce a resultados muchas veces equivocados como estos: Ejemplos: - 2+ 3* 4 = 20(incorrecto) = 14 (correcto) b) si calif1=60 y calif2=80 entonces en programa se usa promedio=calif1 + calif2/2 da como resultado promedio = 100 Recordar siempre, que antes de plantear una formula en un programa se deber evaluar contra el siguiente: Orden de operaciones: 1.- Parntesis 2.- Potencias y races 3.- Multiplicaciones y divisiones 4.- Sumas y restas 5.- Dos o ms de la misma jerarqua u orden, entonces resolver de izquierda a derecha

Nota: Si se quiere alterar el orden normal de operaciones, entonces usar parntesis. Nota: Tampoco es bueno usar parntesis de mas en una operacin, esto solo indica que no se evalo bien la formula, como en el siguiente ejemplo;

aqu los parntesis estn de mas, porque por orden de operaciones, multiplicacin y divisin tienen la misma jerarqua y entonces se resuelven de izquierda a derecha, en sus programas de java jsp ni que falten parntesis ni que sobren parntesis.

UNIDAD 1: JAVA JSP ELEMENTOS BASICOS TEMA 9: APLICACIONES JAVA JSP Recordar que JAVA es un lenguaje de programacin moderno, que esta enfocado a la construccin de sistemas de informacion que se ejecutarn 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 actualizacin 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 aplicacin, cuando al web server le piden un jsp, lo compila, lo convierte a servlet con todas las implicaciones que se mencionarn en el inciso anterior y manda los resultados a la pc remota que lo solicit. 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 construccin de programas, apliacciones y sistemas de informacin modernos. UNIDAD 1: JAVA JSP ELEMENTOS BSICOS TEMA 10: JAVA JSP CONCEPTOS BSICOS DE PROGRAMACION ORIENTADA OBJETOS Para nuestro propsito en general un objeto puede definirse como cualquier cosa, ente o entidad fsica o lgica de informacin. En este sentido todos los elementos materiales o inmateriales pueden clasificarse como objetos. En particular cualquier objeto considerado presenta los siguientes tres elementos: a) Propiedades: Son las caractersticas propias de un objeto estas propiedades o atributos son los que permiten diferenciar o individualizar un objeto de otro objeto ya sea de la misma o diferente clase o categora. Las propiedades mas generales son forma, color, tamao, peso, etc., pero ya en particular: Chamarra Marca, material, precio, color, tamao, etc Alumno Matricula, nombre, edad, domicilio, etc. Gato Raza, nombre, color, edad, etc. VentanaWindows>Tamao, Color, font, etc. b) Mtodos: Son las conductas propias de la naturaleza del objeto. As como las propiedades son el ser (que es) del objeto, los mtodos son el hacer (que hacer) del objeto. ejemplo de mtodos:

Gato > Maullar(), comer(), correr(), saltar(), etc. Alumno> Estudiar(), comer(), asistir clase(), pintear() Cuaderno>Esescrito(), esrayado(), esborrado(), etc. VentanaWindows> Abrir(), cerrar(), maximizar(), etc. c) Eventos: Es la relacin (de varias maneras) que se puede dar entre dos objetos ya sean de la misma o diferente clase. Un evento se manifiesta como un interaccin entre dos objetos, en general al momento de la relacin al mismo tiempo se dar una reaccin o respuesta por parte de los dos objetos que se manifiestan como una serie, cadena o conjuntos de mtodos propios que se activan o disparan, ejemplo: Evento gato detecta gata gato detecta perro Raton click Windows Relacin Mtodos que se activan detectar maullar(), correr(), oler() detectar bufar(), saltar(), correr() click maximizar(), cerrar() minimizar(), etc

maestro ensea alumno Ensear pasar lista(), preguntar(), etc Raton dblclk Windows dblclk

Un Programa en java jsp se puede considerar como un conjunto de una o mas paginas o formas, donde cada una de ellas contiene un conjunto de objetos, componentes o controles. Un componente o propiamente dicho un control es un objeto que se especializa en una tarea especifica por ejemplo hay controles especializados en desplegar textos o mensajes, otros controles se especializan en desplegar imgenes o vdeos, otros en manipular directorios o archivos en disco, etc. Pero en general tanto las formas como los controles no dejan de ser objetos en programacin y por tanto tienen sus propiedades, mtodos y estn sujetos a eventos. OBJETOS HTML Button, Submit, Reset, CheckBox, Radio, Password, Text, TextArea, Select, Hidden Controles Button, Submit y Reset. Propiedades Eventos Metodos form name value enabled Control CheckBox. Propiedades Eventos Metodos form name value enabled checked OnClick click OnFocus focus OnClick click OnFocus focus

defaultchecked Control Radio. Propiedades Eventos form name value enabled checked Control Password. Propiedades Eventos Metodos form name value enabled Controles Text y Textareas. Propiedades Eventos Metodos form name value enabled Control Select. Propiedades Eventos length options OnBlur OnFocus Metodos blur focus OnBlur blur OnFocus focus OnBlur blur OnFocus focus Metodos

OnClick click OnFocus focus

selectedIndex OnChange Control Hidden. Propiedades Eventos Metodos name value

Java Language Keywords Here's a list of Java's keywords. These words are reservedyou cannot use any of these words as names in your Java programs. true, false, and null are not keywords but they are reserved words, so you cannot use them as names in your programs either. abstract double boolean else break byte case catch char extends final finally float for int long native new private strictfp && switch synchronized this throws

interface super

package throw

class

goto &

protected transient public short static try void volatile while

const % if default do import instanceof

continue implements return

% indicates a keyword that is not currently used %% indicates a keyword that was added for Java 2

UNIDAD 2: CONTROL DE PROGRAMA TEMA 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA Instrucciones de control de programa permiten alterar la secuencia normal de ejecucin de un programa. Estas instrucciones se dividen en tres grandes categoras: 1.- Instrucciones Condicionales que en java jsp se implementan con las instrucciones if y switch. b) Instrucciones de ciclos con for while

do while En java jsp muchas de ellas tienen sus correspondientes componentes visuales, derivados de html.

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA TEMA 3: JAVA JSP INSTRUCCIONES CONDICIONALES Una de las mas poderosas caractersticas de cualquier computador es la capacidad que tiene de tomar decisiones. Es decir al comparar dos alternativas diferentes el computador puede tomar una decisin basndose en la evaluacin que hace de alguna condicin. En java jsp algunos ejemplos de instrucciones condicionales: si sueldo > 3000 desplegar rico si no desplegar pobre Fin-si si sexo = 'm'

imprime mujer si no imprime hombre Fin-si De los ejemplos observar que los caminos a seguir por el computador dependern de la evaluacin que el computador hace con y de la condicin. Todo lenguaje de programacin como java jsp debe tener instrucciones que permitan formar condiciones e instrucciones que pueden evaluar esas condiciones. Pero recordar que lenguajes modernos y orientados a clientes-servidores de igual forma tienen componentes que permiten del mismo modo al usuario tomar decisiones incluso directamente en pantalla, es decir tambien existen los objetos, controles o componentes de seleccin y decisin en html. El formato general de una instruccin condicional es:

Como se observa, son cuatro partes bien diferenciadas entre si; La propia instruccin condicional en si La condicin El grupo cierto de instrucciones

El grupo falso de instrucciones Cuando el computador evala una condicin el resultado de esa evaluacin solo es evaluado de dos maneras o la condicin es CIERTA o la condicin es FALSA. Esto depender del valor que tenga asignado o que se haya capturado para la variable que esta en la condicin, por ejemplo si se capturo 6000 en sueldo en el ejemplo a) entonces el computador indicara que la condicin es CIERTA pero en otro caso si a la variable sueldo primero se le asigno un valor de 250 entonces el computador indicara que la condicin es FALSA. Ya dependiendo del resultado de la evaluacin, el computador ejecuta las instrucciones contenidas en el grupo de cierto o falso respectivamente. En este curso de java jsp empezaremos el anlisis por la CONDICIN. UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA TEMA 4: JAVA JSP CONDICIONES SIMPLES

En general todas las condiciones se forman con: Variables Operadores Relacinales Constante o Variables sexo sueldo = > m 300,000

En java jsp una condicin simple se define como el conjunto de variables y/o constantes unidas por los llamados operadores relacinales. UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA TEMA 5: JAVA JSP OPERADORES RELACIONALES Los operadores relacinales que reconoce java jsp son: Operador Significado == > < >= != Igual que Mayor que Menor que Mayor o igual que Menor o igual que No es igual que o es diferente que y el

Tambien observar y tener cuidado sobre todo con el operador de igualdad( operador relacional de comparacin por igualdad(= es decir;

sueldo = 500, Se esta pidiendo cargar o asignar la variable sueldo con el valor 500 sueldo == 500, Se esta pidiendo que se compare el valor o dato que se encuentra en la variable sueldo, contra el numero 500. En java jsp solo este ultimo formato es valido dentro de una condicin en una instruccin condicional. Para objetos derivados de la clase STRING se usara el metodo str1.compareTo(str2) que regresa cero (0) si str1 es igual str2, regresa un positivo si str1 es mayor que str2 y regresa un negativo si str1 es menor que str2.

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA TEMA 6: JAVA JSP INSTRUCCIN IF Es la instruccin condicional mas usada en los diversos lenguajes de programacin, su formato completo y de trabajo en java jsp es: cargar o asignar la variable de condicin; if (condicin) { grupo cierto de instrucciones;} else { grupo falso de instrucciones; };

Primus.- Observar donde van y donde no van los puntos y comas; Secundus.- La condicin va entre parntesis ; Tertius.- Si un if no ocupa un grupo falso de instrucciones entonces no se pone el else, y la llave antes del else si terminara con punto y coma. Ejemplo: Prog2 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 programacinfacil y pedirlo desde ah con la direccin http://programacionfacil.com/tusitio/prog4.html Corrida prog2 jsp

Recordar que es valido usar mas de una instruccin 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 mltiplo de 4 ( recordar el operador mod(%), analizado en el tema de operadores aritmticos). 3.- Capturar los cinco datos mas importantes de un Empleado, incluyendo el sueldo diario y los das 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 7: JAVA JSP CONDICIONES COMPUESTAS En muchas ocasiones es necesario presentar mas de una condicin para su evaluacin al computador. Por ejemplo que el computador muestre la boleta de un alumno si este estudia la carrera de medicina y su promedio de calificaciones es mayor de 70. Una condicin compuesta se define como dos o mas condiciones simples unidas por los llamados operadores lgicos. Los operadores lgicos que java jsp reconoce son: OPERADOR SIGNIFICADO && ! Ejemplo: if ( (sueldo >100) && ( sexo=='m') ) etc, etc, etc. Y recordar que para comparar strings usar; if ( carrera.compareTo(informatica) == 0 ) Notas: Observar que cada condicin simple lleva sus propios parentesis. Si la variable es de tipo string el dato va entre comillas(), pero si la variable es de tipo char el dato va entre apostrofes('). Para que el computador evale como CIERTA una condicin compuesta que contiene el operador lgico &&, las dos condiciones simples deben ser ciertas. Para que el computador evale como CIERTA una condicin compuesta que contiene el operador lgico ||, basta con que una de las condiciones simples sea cierta. La cantidad total de casos posibles cuando se unen dos o mas condiciones simples esta dada por la relacin donde n = cantidad de condiciones, la primera mitad de ellos empieza en cierto y la segunda mitad en falso. Y LOGICO O LOGICO NO NEGACION

Ejemplo, si formamos una condicin compuesta con dos condiciones simples y el operador lgico y, la cantidad total de casos posibles serian construir la siguiente tabla de verdad. Tabla de verdad con y IRA COND SIMPLE 2DA COND SIMPLE EVALUACION C C F F C F C F C F F F , y se puede

La evaluacin final, se obtiene usando la regla anteriormente descrita para una condicin compuesta, que contiene el operador Y. Esta tabla significa lo siguiente; 1.- Cualquiera que sean la cantidad de datos procesados, siempre caer en uno de estos cuatro casos generales. La tabla de verdad para una condicin compuesta con Or es la siguiente; IRA COND SIMPLE 2DA COND SIMPLE EVALUACION C C F F C F C F C C C F

Construir una tabla de verdad para una condicin compuesta de tres o mas condiciones simples, es tambin tarea sencilla, solo recordar que; 1.- La cantidad posible de casos es casos posibles, la mitad empiezan con Cierto y la otra mitad empiezan con Falso. 2.- Para evaluar esta condicin triple primero se evalan las dos primeras incluyendo su operador bajo las reglas ya descritas y luego se evala el resultado parcial contra la ultima condicin y ultimo operador para obtener la evaluacin final. Ejemplo una condicin compuesta de tres condiciones simples, donde el primer operador lgico es el y y el segundo operador lgico es el O, dara la siguiente tabla de verdad. Ira cond 2da cond Eval 1a Y 2a 3ra cond Eval eval O 3ra C C C C F F F F C C F F C C F F C C F F F F F F C F C F C F C F C C C F C F C F

TAREAS PROGRAMACION JAVA JSP

1.- Construir un programa que capture un numero cualesquiera e informe si es o no es mayor de 50 y mltiplo de tres. ( solo escribir el mensaje de respuesta de manera muy clara y esto resuelve el problema ) 2.- Construir un programa que indique si un numero es un par positivo. 3.- Capturar los datos de una mercancia incluyendo su cantidad en existencia, desplegar una orden de compra si la cantidad en existencia del producto es menor que el punto de reorden, o si el origen del producto es nacional. 4.- Construir un programa que capture los datos de un empleado, desplegar en una pagina su cheque semanal si gana mas de $500.00 y si esta en el departamento de produccin, en caso contrario desplegarle en otra pagina un bono de despensa del 25% de su sueldo semanal.

UNIDAD 2: JAVA JSP INSTRUCCIONES DE CONTROL DE PROGRAMA TEMA 8: JAVA JSP INSTRUCCIN SWITCH Tambin existen ocasiones o programas donde se exige evaluar muchas condiciones a la vez, en estos casos o se usa una condicin compuesta muy grande o se debe intentar convertir el problema a uno que se pueda resolver usando la instruccin SWITCH. Esta instruccin es una instruccin de decisin mltiple 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 instruccin es el siguiente; capturar o asignar variable de condicin; switch(var OPCION) { case const1: instruccin(es); break; case const2: instruccin(es); break; case const3: instruccin(es); break; default: instruccin(es); };

prog3 jsp

<%

// declarando

char letra=' ';

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

//recordar que TEXTBOX contiene una string

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

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:

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 funcin vista para cuando x =3,-4, 5 UNIDAD 2: JAVA JSP CONTROL DE PROGRAMA TEMA 9: CONTROL SELECT JAVA JSP Existen muchas ocasiones en donde el usuario del programa tiene que proporcionar datos que provienen de un conjunto finito y muy pequeo de posibles respuestas esto significa que cada vez que se ejecute el programa el usuario estar proporcionando las mismas respuestas. Ejemplo de esta clase de datos, son por ejemplos Municipio en BC las posibles respuestas solo son (Tecate, Tijuana, Mexicali, Ensenada, Rosarito), otro ejemplo es Sexo (Hombre, Mujer), etc. Para situaciones como esta existen componentes html que permiten programar por adelantado las posibles respuestas y el usuario solo debe seleccionar la respuesta apropiada en lugar de tener que escribirla. Este control SELECT nos permite definir en primera instancia un conjunto de datos o valores respuestas asociados a una caja de edicin cualesquiera as ahora el usuario tendr la oportunidad de seleccionar un dato del conjunto de datos o respuestas ya predefinido. Este componente SELECT DEBERA CONSTRUIRSE EN dos partes una parte de encabezado para poner el nombre del grupo de respuestas( por ejemplo municipios, sexo, etc.) La segunda parte es la lista de opciones o respuestas que se debe cargar al tiempo de ejecucin de la forma html como lo muestra el siguiente programa: Prog4.jsp

<%

// declarando

String municipio="";

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

municipio =request.getParameter("MUNICIPIO");

out.println(municipio+" =");

if (municipio.compareTo("ENSENADA")==0) out.println("TIBIO");

if (municipio.compareTo("TIJUANA")==0) out.println("HELADO");

if (municipio.compareTo("MEXICALI")==0) out.println("CALIENTE");

};

// construyendo forma dinamica

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

out.println("<B>MUNICIPIOS</B>");

out.println("<SELECT NAME=MUNICIPIO>");

out.println("<OPTION>ENSENADA<OPTION>TECATE<OPTION>TIJUANA<OPTION>MEXICALI");

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

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

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

%>

CORRIDA:

Notas: 1.- Observar que el servidor de paginas devolvio el par MUNICIPIO=TIJUANA que estamos capturando en nuestra variable municipio. TAREAS PROGRAMACION JAVA JSP 1.- Arreglar un par de los programas anteriores agregandole este control a los que se puedan. 2.- Evaluar la funcin para x = 2,-5, 8 3.- Construir una forma.html con los datos de un automvil(usar puros select) y construir dos paginas de salida o respuesta una con un plan de financiamiento a dos aos u otra con un plan de financiamiento a tres aos. UNIDAD 2: JAVA JSP CONTROL DE PROGRAMA TEMA 10: JAVA JSP CHECKBOX Y EXCEPCIONES

El componente CheckBox , permite seleccionar una opcin al usuario del programa o tomar una decisin directamente en pantalla. Ejemplos de uso:

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>");

}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 fuern seleccionados. Corrida:

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 validacin y no olvidar subirlo a tu sitio. ERRORES Y EXCEPCIONES Estos problemas de errores y excepciones que en java, se producen al tiempo de execucin del programa son los problemas normales de mal codigo y que tambien se producen al tiempo de compilacin no al tiempo de ejecucion del programa, este tema se refiere a eehhrorres y excepciones al tiempo de ejecucin 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 ejecucin del programa cuando en alguna parte del programa se produce alguna condicin 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 comparacin java avisa de una excepcion como se muestra en la siguiente pantalla ejemplo:

Esta excepcin ocurrio al tiempo de ejecucin 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 ejecucin, mientras que un error aunque sea atrapado(catch) por el programa y el programador el programa suspendera y terminara su ejecucin. Si errores o excepciones no son atrapadas(catch) el programa terminara su ejecucin y mandara el aviso al usuario, como se demuestra en la pantallita de arriba. Es por esta razn que es conveniente y necesario atrapar (catch) errores o excepciones, asi el programador podra incluir algun mecanismo de correccin 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 ejecucin 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 excepcin y observar que la misma excepcion que aparecio en dicha pantallita, se puso en la clausula catch. 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 funcin para x = 2,-5, 8 (usar un CheckBox por cada valor de x, y programar cada el if de cada CheckBox con la operacin correspondiente y el despliegue del resultado). 2.- Construir un pagina html con los datos de un automvil y una segunda pagina muestra un plan de financiamiento a dos aos y una tercera pagina muestra un plan de financiamiento a tres aos. 3.- Construir un programa de seleccion de mens, 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 dems componentes radioButton en la forma, se deseleccionan solos es por esta razn 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>");

out.println("<input checked>masculino<br>");

type=radio

name=SEXO

value=masculino

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 checked>sistemas<br>");

type=radio

name=CARRERA

value=sistemas

out.println("<input value=informatica>informatica<br>");

type=radio

name=CARRERA

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 razn principal para esta situacin 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:

TAREAS PROGRAMACION JAVA JSP 1.- CONSTRUIR UN CUESTIONARIO DE 6 PREGUNTAS SOBRE LOS HBITOS 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 instruccin simple o compuesta. Su formato general es: for (inicializacin; condicin; incremento) { instruccin(es); }; En su forma simple la inicializacin es una instruccin de asignacin que carga una variable de control de ciclo con un valor inicial. La condicin es una expresin relacional que evala 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 nio paseandose en una bicicleta; Mira ma'a sin manos Mira ma'a parado Mira ma'a sin dientes corrida: prog7 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;x15;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 tambin 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 condicin. ejemplo; for (x= 50 ; x >= 10; x= x-4 ) { etctera }; 6.- Solo para los casos de incrementos y decrementos de una en una unidad substituir en el for; el x = x + 1 por x++ el x = x - 1 por x TAREAS PROGRAMACION JAVA JSP

1.- CONSTRUIR UN PROGRAMA QUE DESPLIEGUE LOS NMEROS DEL 20 AL 30. 2.- DESPLEGAR LOS ENTEROS ENTRE 50 Y 30 ACOMPAADOS DE SU POTENCIA CUADRADA Y RAZ CUBICA RESPECTIVA(revisar el tema de operadores aritmeticos). 3.- DESPLEGAR LOS MLTIPLOS DE 5, ENTRE 10 Y 50, ACOMPAADOS 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> -310 (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 condicin permanezca como verdadera en el momento en que la condicin se convierte en falsa el ciclo termina. Su formato general es : cargar o inicializar variable de condicin; while(condicin) { grupo cierto de instrucciones; instruccin(es) para salir del ciclo; }; Un error muy comun con el while, es poner un punto y coma(;) despues de la (condicin) ejemplo while(condicion); -esto es y causa un error. Prog8 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 condicin y cuidar que existan 2 de rompimiento o terminacin de ciclo. El grupo cierto de instrucciones puede ser una sola instruccin o todo un grupo de instrucciones. La condicin puede ser simple o compuesta. Los casos generales de for tambien se aplican a while.

A este ciclo tambin se le conoce tambin como ciclo de condicin de entrada o prueba por arriba porque este ciclo evala primero la condicin 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 ACOMPAADOS 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 bsica con el ciclo while es que la prueba de condicin es hecha al finalizar el ciclo, es decir las instrucciones se ejecutan cuando menos una vez porque primero ejecuta las instrucciones y al final evala la condicin; Tambin se le conoce por esta razn como ciclo de condicin de salida. Su formato general es : cargar o inicializar variable de condicin; do { grupo cierto de instruccin(es); instruccin(es) de rompimiento de ciclo; } while (condicin); prog9.jsp y ejecutarlo directamente( si quieren).

<%! int x; %>

<%

x=1;

do {

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

x++;

}while (x<=10);

%>

Corrida prog11.jsp

Otra diferencia bsica con el ciclo while es que, aunque la condicin 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 1: JAVA JSP INTRODUCCION Uno de los problemas mas comunes en los diversos sistemas de informacin es el tratamiento o procesamiento de una gran volumen de datos o de informacin. Las variables usadas hasta ahora reciben propiamente el nombre de variables escalares, porque solo permiten almacenar o procesar un dato a la vez. Por ejemplo si se quiere almacenar nombre y edad de 15 personas con el mtodo tradicional se ocuparan 30 variables y solo es nombre y edad de 15 personas, agreguen mas datos y mas personas y ya es tiempo de empezar a analizar otro tipo de variables.

Es decir, en problemas que exigen manejar mucha informacin o datos a la vez, variables escalares no son suficientes ya que su principal problema es que solo permiten almacenar y procesar un dato a la vez. En java Jsp se ocupan entonces variables que sean capaces de almacenar y manipular conjuntos de datos a la vez. Variables de tipo arreglo si permiten almacenar y procesar conjuntos de datos del mismo tipo a la vez. Cada dato dentro del arreglo se le conoce como elemento del arreglo y se simboliza y procesa (captura, operacin, despliegue ) usando el nombre del arreglo respectivo y un subndice indicando la posicin relativa del elemento con respecto a los dems elementos del arreglo, solo recordar que en JAVA JSP la primera posicin, elemento o rengln es el 0 (cero), ej. NOMBRES Juan >nombres(0) Pedro nombres(1) Rosa > nombres(2) Jose > nombres(3) Sin embargo sus problemas son similares a los de variables normales es decir hay que declararlos, capturarlos, hacer operaciones con ellos, desplegarlos, compararlos, etc. UNIDAD 3:JAVA JSP ARREGLOS TEMA 2: JAVA ARREGLOS JSP En programacin tradicional siempre se manejan dos tipos de arreglos los arreglos tipo listas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados, matrices o bidimensionales en ambos casos son variables que permiten almacenar un conjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas que cada uno de estos tipos contiene, como en los siguientes ejemplos; a) LISTAS EDAD 18 34 22 15 B) TABLAS CIA ACME ING MENS VTAS (MILES DE $) .ENE FEB MAR ABR MAY SUC A 10 20 30 40

SUC B 50 60 70 80 SUC D 90 100 110 120 En java Jsp se observa la diferencia principal entre un arreglo tipo lista y un arreglo tipo tabla son las cantidades de columnas que contienen. NOTA IMPORTANTE.- LOS CONCEPTOS MANEJADOS AQUI ESTAN ENFOCADOS A LOS SISTEMAS DE INFORMACION CONTABLES FINANCIEROS ADMINISTRATIVOS. EN ALGEBRA MATRICIAL, SI SON IMPORTANTES LOS CONCEPTOS DE VECTORES Y MATRICES, PERO LAS OPERACIONES Y METODOS SON PRECISAMENTE LOS DEL ALGEBRA MATRICIAL.

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. Tambin reciben el nombre de vectores en lgebra o arreglos unidimensionales en programacin. 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 tamao 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 tamao fijo e inicializadas o cargadas notas: Recordar tambin que la primera posicin o rengln en una lista es la posicin o rengln 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 )

// 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:

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 rengln misma que tambin se usa como ndice de la lista. Recordar que todos los datos internos de la lista estarn 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). 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), despus calcular una cuarta lista con el gasto total por cada producto desplegarlo todo e incluir tambin 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 rengln 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 declaracin de una tabla sera de acuerdo a los siguientes formatos: 1) tipodato nomtabla[][]= new tipodato[reng][col]; ejemplo: int calif[][]=new int[3][4]; 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>");

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: Observar el formato de declaracin 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 instruccin 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 ajustarn por su cuenta, para corregir esta situacin 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 AO 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

'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 pequeas es el uso de declaraciones. Una declaracin es un grupo de instrucciones, variables, constantes, etc, que estan diseados con un prposito 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 declaracin se usara ese nombre propio como una sola instruccin 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 invocacin a el procedimiento durante la ejecucin 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;

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 value="+altura+"><BR>");

ALTURA:<INPUT

TYPE=TEXT

NAME=ALTURA

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:

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 creacin 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 algn proceso. 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 value="+altura+"><BR>");

ALTURA:<INPUT

TYPE=TEXT

NAME=ALTURA

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:

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 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 funcin o procedimiento incluyendo main, a estas se les llama variables locales y solo pueden ser usadas por instrucciones que esten dentro de esa funcin o procedimiento. En segundo lugar es como parametro de una funcin o procedimiento, donde despues de haber recibido el valor, podra actuar como variable local en esa funcin o procedimieto. En escencia una variable local solo es conocida por el cdigo de esa funcin 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 funcin 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 instruccin 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 parntesis son requeridos. La declaracion de parametros es la especificacion de cada tipo de parametro recibido. INSTRUCCION RETURN Dentro del cuerpo de la funcin deber haber una instruccin return cuando menos, para regresar el valor, esta instruccin 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:

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 diseadas para realizar operaciones con los argumentos y regresan un valor basado en el resultado de esa operacin. Las segundas funciones son aquellas que manipulan informacin 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. 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 funcin solo se manda el nombre del arreglo sin corchetes e indices, en el procedimiento o funcin 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 razn 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)

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 funcin se reflejaran en el arreglo original, es por esto que si se quiere modificar un arreglo en una funcin 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. UNIDAD 5: JAVA JSP REGISTROS Y ARCHIVOS SECUENCIALES TEMA 1: INTRODUCCION JAVA JSP Antes de empezar a programar en serio se estudian en esta unidad dos problemas. Problema A: Variables que puedan almacenar un conjunto de valores y no necesariamente del mismo tipo. Problema B: Resolver el problema de almacenar en forma permanente los datos que se generan dentro de un programa ya sea por captura, proceso, etc; El problema (A) se resuelve usando el concepto de estructuras o registros el problema (B) se resuelve usando el concepto de archivos. 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 informacin 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 programacin 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;

<%!

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:

Recordar no usar objetos OUT, Request en la parte declarativa de el programa, la razn 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 situacin 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. 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: Operacin consistente en sacar los datos del archivo en disco y mandarlo o cargar la variable respectiva Organizacin 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 operacin) 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 notacin 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 elementales son: muchas otras operaciones asociadas a archivos las mas

1.- Creacin 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 creacin con apertura creacin 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 operacin mas importante en cualquier programa que maneje archivos o se cierra el archivo como ultima instruccin 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 an, a una pagina html 7.-Busqueda en archivos: Una de las operaciones mas comunes, consiste en que el usuario pide toda la informacin de algun renglon en disco, porporcionando la informacin 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 (condicin), 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 calificacin 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 Grabacin y lectura son los dos procesos mas comunes con archivos disco en cualquier lenguaje de programacin. Codigo de grabacin: 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>");

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 written to this data output stream so far.

write(byte[] b, int off, int len) void 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. writeByte(int v) Writes out a byte to the underlying output stream as a 1-byte value. writeChar(int v) Writes a char to the underlying output stream as a 2-byte value, high byte first.

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

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

void WriteChars (String s) writes a string to the underlying output stream as a sequence of characters. writeDouble(double v) Converts the double argument to a long using the doubleToLongBits method in class void Double, and then writes that long value to the underlying output stream as an 8-byte quantity, high byte first. writeFloat(float v) Converts the float argument to an int using the floatToIntBits method in void class Float, and then writes that int value to the underlying output stream as a 4-byte quantity, high byte first. void void void void writeInt(int v) Writes an int to the underlying output stream as four bytes, high byte first. writeLong(long v) Writes a long to the underlying output stream as eight bytes, high byte first. writeShort(int v) Writes a short to the underlying output stream as two bytes, high byte first. 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 grabacin 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 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=Red>ESTATURA</th></TR>");

bgcolor=White>NOMBRE</th><th

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) {}

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: Method Summary int int boolean byte char double float void void int String with: BufferedReader d
= new BufferedReader(new InputStreamReader(in)); |

read(byte[] b) See the general contract of the read method of DataInput. read(byte[] b, int off, int len) See the general contract of the read method of DataInput. readBoolean() See the general contract of the readBoolean method of DataInput. readByte() See the general contract of the readByte method of DataInput. readChar() See the general contract of the readChar method of DataInput. readDouble() See the general contract of the readDouble method of DataInput. readFloat() See the general contract of the readFloat method of DataInput. readFully(byte[] b) See the general contract of the readFully method of DataInput. readFully(byte[] b, int off, int len) See the general contract of the readFully method of DataInput. readInt() See the general contract of the readInt method of DataInput.

| long | See the general contract of the readLong method of DataInput. | readShort() short See the general contract of the readShort method of DataInput. int int String static String int readUnsignedByte() See the general contract of the readUnsignedByte method of DataInput. readUnsignedShort() See the general contract of the readUnsignedShort method of DataInput. readUTF() See the general contract of the readUTF method of DataInput.

readLong()

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. 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. 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 grabacin 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 informacin, 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 condicin. 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=Red>ESTATURA</th></TR>");

bgcolor=White>NOMBRE</th><th

// 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("<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:

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 condicin por ejemplo se pide desplegar todos los alumnos de sistemas o todos los empleados que sean de sinaloa, etc. Filtros se usan para obtener informacin 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)

// construyendo tabla html

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

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

bgcolor=White>NOMBRE</th><th

// 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>");

%>

Corrida filtro:

Seria mas interesante construir un programa donde el filtro se construya con dos comboboxs y un textbox para el dato(recordar definicin de condicin 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. 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 informacin, 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 continuacin damos un ejemplo de eliminacin 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 {

// 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>");

%>

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 11: EDICION DE REGISTROS JAVA JSP Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacn o para corregir algun error de captura original o para agregar alguna columna que no existia por modificacin 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

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 value="+estatura+"><BR>");

:<INPUT

TYPE=TEXT

NAME=ESTATURA

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

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

} }

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

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);

};

}}

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:

corrida:

corrida

TAREAS PROGRAMACION JAVA JSP 1.- construir programas de edicin para sus archivos 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 informacn o para corregir algun error de captura original o para agregar alguna columna que no existia por modificacin 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

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 value="+estatura+"><BR>");

:<INPUT

TYPE=TEXT

NAME=ESTATURA

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

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

} }

catch(FileNotFoundException fnfe) {}

catch (IOException ioe) {};

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);

};

}}

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:

corrida:

corrida

TAREAS PROGRAMACION JAVA JSP 1.- construir programas de edicin 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="";

// 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();

};

// 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 direccin internet del servidor por ejemplo http:\\misitio.com\pato.jpg, sin embargo en el programa se esta usandohttp:\\\\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 direccin incluia al principio y una diagonal \ al final se mandaron \\

y respectivamente. corrida:

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 1: INTRODUCCION REGISTROS ARCHIVOS SE DICE QUE UN ARCHIVO ES DE ACCESO U ORGANIZACION DIRECTA CUANDO PARA ACCEDER A UN REGISTRO N CUALESQUIERA NO SE TIENE QUE PASAR POR LOS N-1 REGISTROS ANTERIIORES. Como se observa de esta definicin los archivos directos tienen una gran ventaja( son mucho mas rapidos) cuando se comparan con los archivos de acceso u organizacion secuencial estudiados en la unidad anterior. Aunque lo anterior no quiere decir que son mejores que los secuenciales, es decir es el propio problema planteado quien exigira una solucion u otra, por ejemplo si se quiere construir un archivo para almacenar los datos de un guestbook, si se construye de manera directa seria muy rapido pero si lo construimos de manera secuencial, se podran almacenar datos con cantidades de informacin mas adecuados al problema.

Es decir un archivo de acceso directo tiene que tener sus registros o renglones de un tamao fijo o predeterminado de antemano. En java archivos de acceso directo pertenecen a la clase RANDOMACCESSFILE esta clase contiene muchas propiedades algunas de las cuales se muestran aqui, estas propiedades se estaran usando mucho en esta unidad. Un archivo de acceso directo permite posicionar el apuntador de interno de registros, a cualquier registro determinado sin necesidad de pasar por todos los registros anteriores, usando las siguientes funciones. Constructor Summary RandomAccessFile(File file, String mode) Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument. RandomAccessFile(String name, String mode) Creates a random access file stream to read from, and optionally to write to, a file with the specified name. Method Summary void close() Closes this random access file stream and releases any system resources associated with the stream. getFD() Returns the opaque file descriptor object associated with this stream. getFilePointer() Returns the current offset in this file. length() Returns the length of this file. read() Reads a byte of data from this file. read(byte[] b) Reads up to b.length bytes of data from this file into an array of bytes. read(byte[] b, int off, int len) Reads up to len bytes of data from this file into an array of bytes. readBoolean() Reads a boolean from this file. readByte() Reads a signed eight-bit value from this file. readChar() Reads a Unicode character from this file. readDouble() Reads a double from this file. readFloat() Reads a float from this file. readFully(byte[] b) Reads b.length bytes from this file into the byte array, starting at the current file pointer. readFully(byte[] b, int off, int len) Reads exactly len bytes from this file into the byte array, starting at the current file pointer. readInt() Reads a signed 32-bit integer from this file.

FileDescriptor long long int int int boolean byte char double float void void int

String long short int int String void void int void void void void void void void void

readLine() Reads the next line of text from this file. readLong() Reads a signed 64-bit integer from this file. readShort() Reads a signed 16-bit number from this file. readUnsignedByte() Reads an unsigned eight-bit number from this file. readUnsignedShort() Reads an unsigned 16-bit number from this file. readUTF() Reads in a string from this file. seek(long pos) Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs. setLength(long newLength) Sets the length of this file. skipBytes(int n) Attempts to skip over n bytes of input discarding the skipped bytes. write(byte[] b) Writes b.length bytes from the specified byte array to this file, starting at the current file pointer. write(byte[] b, int off, int len) Writes len bytes from the specified byte array starting at offset off to this file. write(int b) Writes the specified byte to this file. writeBoolean(boolean v) Writes a boolean to the file as a one-byte value. writeByte(int v) Writes a byte to the file as a one-byte value. writeBytes(String s) Writes the string to the file as a sequence of bytes. writeChar(int v) Writes a char to the file as a two-byte value, high byte first. writeChars(String s) Writes a string to the file as a sequence of characters. 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 file as an eight-byte quantity, high byte first. 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 file as a four-byte quantity, high byte first. writeInt(int v) Writes an int to the file as four bytes, high byte first. writeLong(long v) Writes a long to the file as eight bytes, high byte first. writeShort(int v) Writes a short to the file as two bytes, high byte first. writeUTF(String str)

void

void void void void void

Writes a string to the file using UTF-8 encoding in a machine-independent manner. Fuente: JAVA SUN 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;

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:

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 creacin 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 funcin 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 instruccin: 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.*" %>

<%

// 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 */ }

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 observacin es que se esta usando el modo rw, reestudiar la clase de modos de apertura. Recordar que un archivo directo tiene un tamao de registro predifinido y es importante qu dicho tamao 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 tamao se tendra que ampliar con caracteres en blanco , si el tamao 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 tamao de registros grabados en disco porque esta informacin se usara ampliamente en el resto de los programas de esta unidad. Las metodos de grabacin 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

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=Red>EDAD</th></TR>");

bgcolor=White>NOMBRE</th><th

// 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>");

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 operacin 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 informacin 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.

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS

TEMA 4: BUSQUEDA JAVA JSP En este tema se analiza la busqueda de un registro o rengln determinado. En este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacin proporcionando un dato de busqueda generalmente la clave del registro. Recordar que en esta operacin 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

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=Red>EDAD</th></TR>");

bgcolor=White>NOMBRE</th><th

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:

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 tamao 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 * tamao de registro). TAREAS PROGRAMACION JAVA JSP Construirles programas de busquedas a los archivos ya construidos.
1)

long)(clave)* tamaoderegistro

UNIDAD 6: JAVA JSP REGISTROS Y ARCHIVOS DIRECTOS TEMA 5: FILTROS CONDICIONES JAVA JSP Otro problema similar al anterior es el de filtros o condiciones, es decir en muchas ocasiones es necesario obtener informacin acerca de un subconjunto de renglones de el archivo. Por ejemplo todos los estudiantes que sean mayores de 17 aos, 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=Red>EDAD</th></TR>");

bgcolor=White>NOMBRE</th><th

// capturando condicion de busqueda

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

// iniciando ciclo lectura archivo

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

// 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>");

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

%>

corrida:

Como se observa es un problema y una solucin 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 Eliminacin 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 instruccines 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 la posicin 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 informacin posteriormente. Es por eso que otra tecnica comn de eliminacin 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");

// 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>");

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

%>

corrida

corrida programa despliegue:

como se observa la solucin es muy sencilla solo se ocupa: 1.- leer fread() el registro, esto mueve el apuntador al siguiente registro. 2.- modificar registro 3.- regresar a posicin 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 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 revisin 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 CAMPOS DE LOS

<%@ 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 {

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 value=\""+nombre+"\"><BR>");

TYPE=TEXT

NAME=NOMBRE

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

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

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

corrida

La unica instruccin 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 modificacin en disco, asimismo se uso un campo hidden para pasar la informacin 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. 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>");

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 direccin internet del servidor por ejemplo http:\\misitio.com\pato.jpg, sin embargo en el programa se esta usandohttp:\\\\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 direccin incluia al principio y una diagonal \ al final se mandaron \\ y respectivamente. corrida:

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 1: INTRODUCCIN En este capitulo se analizan en general dos problemas: a) Variables que permitan almacenar conjuntos de datos como los arreglos pero con distintos tipos de datos, este primer problema se resolva en la antigedad usando las llamadas variables registro. b) Permanencia de los datos, hasta ahora todos los datos capturados, calculados, creados, etc., al terminar o cerrarse el programa se pierden y es necesario volver a capturarlos en la siguiente ejecucin o corrida del programa. Tradicionalmente en programacin antigua, este segundo problema se resolva usando el concepto de archivos, que son medios permanentes de almacenamiento de datos en dispositivos o perifricos apropiados generalmente disco, cinta magntica, etc. 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 informacin. 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. Tambin se pueden definir como representaciones simblicas y programticas de entidades lgicas de informacin ejemplos de variables registros son alumnos, empleados, clientes, proveedores, productos, autos, etc. Estas variables registros tambin ocupan programas o rutinas de programas para procesarlas por ejemplo un procedimiento, modulo o subrutina se encargara de capturar los datos que contendr la variable registro otro procedimiento para corregir los datos que ya contiene, otro procedimiento para desplegarlos en pantalla ya cuando a sido capturada y as sucesivamente. 2.-Archivos, que en principio pueden entenderse como una especie de almacenes o bodegas para almacenamiento de datos en forma permanente en disco es decir, un archivo de empleados en disco contiene todos los datos de todos los empleados de una empresa. Igualmente los archivos ocupan su propios programas o subrutinas o procedimientos especializados por ejemplo, procedimientos para crear los archivos, para almacenar o dar de altas los registros en el archivo, procedimientos para buscar un registro determinado, procedimiento para dar de baja un registro, etc. 3.- Una aplicacin que es un programa que se encarga de coordinar todos los programas descritos y presentar a usuarios de manera clara, fcil, accesible y entendible. Salta a la vista que construir un sistema de informacin por ejemplo para una tienda de vdeo o para un refaccionaria etcetera, involucra un gran cantidad de

trabajo de programacin puesto que hay que programar muchas variables registros, muchos archivos en disco y construir una o muchas aplicaciones. Este modelo se usa todava en la actualidad pero es obvio que mejores maneras, mas rpidas, seguras y eficientes existen en la actualidad para resolver estos problemas, y esto nos lleva al segundo modelo de datos. b) Modelo de Bases de Datos Relacinales: este modelo intenta simplificar la construccin de sistemas de informacin como los antes descritos, este modelo solo incluye en forma simple los siguientes elementos: b.1) Tablas, es una combinacin de las variables registro y de los archivos del modelo anterior. Es decir cuando un programador moderno define o declara una tabla en un programa realmente 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 automticamente se convertir en un espejo de la tabla en memoria es decir, cuando se cargan los datos en la tabla en memoria tambin se estarn cargando en disco. Otra vez cuando el programador escribe cdigo para capturar los datos y mandarlos a la tabla en pantalla-memoria, realmente tambin lo esta haciendo para darlos de alta en disco. b.2) Aplicacin, que tiene la misma funcin 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. Como se observa en este modelo es mas sencillo construir sistemas de informacin puesto que la parte programtica 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 informacin de una entidad fsica o lgica de informacin: ej.: Tabla Empleado: Clave Empleado Nombre Empleado Direccin Empleado Edad Empleado Telfono Empleado

etc. Empleado Tabla Proveedor: Clave Proveedor Nombre Proveedor Empresa Proveedor

Telfono Proveedor Fax Proveedor Celular Proveedor

etc. Proveedor Tabla Autos: Numero de Serie Modelo Marca Tipo Color Capacidad

etc. REGLAS: Observar que cada tabla empieza con una clave generalmente de tipo numrica. Todos los elementos de la tabla solo hacen referencia hacia el mismo ente o sujeto de informacin. Cada elemento solo representa o debe contener un solo dato de informacin. No se respetan o siguen al pie de la letra estos tres postulados y empiezan los problemas al tiempo de programacin. Existe una segunda forma o manera de representar las tablas, ejemplo: Tabla: Camisas NUMCAMISA MARCA 1 2 3 JEANS VOLIS ESTILO SPORT VESTIR MEDIDA GRANDE COLOR AZUL MATERIAL ALGODON POLIESTER

MEDIANA NEGRA

GENERICA CAMISETA LARGA

MORADO RARON

Tabla: Clientes NUMCLIENTE NOMCLIENTE 1 2 3 JUAN PEREZ ROSA MARES DIRCLIENTE AV ABA 2233 TELCLIENTE 2345678

LUIS SANCHEZ CALLE ZETA 3434 4567899 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 informacin solo se presenta una instancia o rengln de una entidad lgica, 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.- MERCANCAS 5.- PELCULAS 6.- MEDICINAS 7.- MAESTROS 8.- MATERIAS 9.- COMPUTADORAS 10.- BANCOS UNIDAD 7 JAVA JSP INT A LAS BASES DE DATOS TEMA 4: JAVA JSP TABLAS (CONTINUACIN) El trabajo correcto con bases de datos relacinales se divide en dos grandes pasos o etapas bien diferenciadas entre si: En la primera etapa se disea la tabla con sus campos, llaves y condiciones especiales, luego se usa un paquete o programa de software especializado en la construccin, mantenimiento y administracin de la base de datos, este software se usa para convertir la tabla o tablas ya bien diseadas en un archivo en disco. Existe software especializado en bases de datos, los llamados servidores de bases de datos, los tres 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 pequeos 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 creacin, mantenimiento, seguridad, privacidad, etc. de un conjunto de tablas o mejor dicho una base de datos, DBMS comunes son access, postgres, fox, clipper, etc. 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 aplicacin o aplicaciones que ya tendrn acceso o podrn manipular los datos contenidos en la tabla, estas aplicaciones se escriben usando ya sea lenguajes clsicos de programacin como BASIC, PASCAL, COBOL, CBUILDER, DELPHI, JAVA, VBSCRIPT, PERL, JSCRIPT, CSHARP, etc. DISEO Y CREACIN DE UNA TABLA El primer paso antes de usar el paquete correspondiente a esta tarea, es disear la tabla completamente, esto exige: a) Nombre apropiado y determinacin de atributos y campos correspondientes. b) Seleccionar y determinar el atributo principal o campo clave o llave primaria que se utilizara como el identificador nico que permite diferenciar cada instancia o rengln diferente dentro de la tabla.

c) Tambin se puede seleccionar otros campos que puedan servir mas adelante para ordenar de manera diferente la tabla, es decir una tabla en principio ya est ordenada por campo clave por ejemplo, la matricula de un alumno, el numero de empleado, etc., pero existirn muchas ocasiones, mas adelante donde se puede pedir un orden diferente, por ejemplo, por ciudad, por carrera, por nombre, por edad, etc., la buena ingeniera de una base de datos exige tomar en cuenta estos y otros muchos problemas y detalles. d) A estos atributos o campos especiales se les conoce como claves o llaves secundarias, que internamente generan otra tabla especial llamada tabla o archivo de ndices(tabla o archivo que contiene dos campos, el primero es la clave secundaria ordenada y el segundo la posicin o rengln donde se encuentra en la tabla original). e) Escribir restricciones y condiciones apropiadas para ciertos atributos, por ejemplo el nmero de empleado deben comenzar en 500, la edad no debe ser mayor de 150 aos, etc. Ya listo el diseo de la tabla, se usara el programa correspondiente para su creacin y almacenamiento, en este caso Microsoft Access. 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 aplicacin con una base de datos y mas que comunicar se pretende que el programa o aplicacin 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. El modo de comunicarse entre nuestro programa o aplicacin y la base de datos (ya sea fisica o un dbserver) implica que ambos manejen un lenguaje de programacin comun, es decir no se puede mandar una instruccin 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 programacin), para resolver este problema de comunicacin es que se usa un lenguaje comun de bases de datos que tanto los lenguajes de programacin 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 programacin, 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 representacin 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= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

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) {};

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

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>

<%

// declarando y creando objetos globales

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

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

// detectando y cargando el objeto submit de html

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

// abriendo canal o enlace en su propio try-catch

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) {};

//leyendo tabla en disco y pasandola al resultset

try { tabla = instruccion.executeQuery("select * from mitabla");

// empezando a construir una tabla html

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

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

// mandando resultset a una tabla html

// y ciclo de lectura del resultset

while(tabla.next()) {

out.println("<TR>");

out.println("<TD>"+tabla.getString(1)+"</TD>");

out.println("<TD>"+tabla.getString(2)+"</TD>");

out.println("<TD>"+tabla.getString(3)+"</TD>");

out.println("</TR>"); }; // fin while

out.println("</TABLE></CENTER></DIV></HTML>");

// cerrando resultset

tabla.close(); instruccion.close(); canal.close();} //fin try no usar ; al final de dos o mas catchs

catch(SQLException e) {};

};

// construyendo forma dinamica

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

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

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

%>

Corrida:

notas: 1.- revisar con cuidado el programa, proque como todo buen programa lleva incluida mucha documentacin o explicacin. 2.- Se sigue el procedimiento generico para procesar tablas 3.- Observar y siempre incluir los import's indicados. 4.- Se empieza creando las variables globales a ocupar y abriendo la coneccin a la base de datos, si se les hace muy grande la string del provedor, pueden cargarla primero en una variable string y carguen la string en el constructor de la coneccin, pero esto es opcional. 5.- Tomar nota como se hace una referencia a la base de datos, esto es en c:/pfacil/mibase.mdb ( ojo con las diagonales) 6.- Se crea el enlace y se carga el resultset(o tabla en memoria) con la instruccin sql y la coneccion, aqui es necesario entender que existen varias maneras de hacer este proceso. 7.- Luego se crea el resultset(tabla) y se cargo con toda la base de datos en disco 8.- Posteriormente se carga el TABLE DE HTML con el resultset. 9.- Para visitar o procesar todos los renglones de la tabla del dataset se usa un ciclo while, y el metodo RESULTSET.NEXT() y por el nombre se ve que existen otros metodos utiles para navegar por todos los renglones de resultset, tales como last(), prior() etc. 10.- Para procesar un dato, celda o columna de un renglon cualesquiera se usa el siguiente metodo RESULTSET.GETSTRING(numerocolumna o nombrecolumna).

11.- ES MUY IMPORTANTE ESTUDIAR TODOS LOS METODOS DEL RESULTSET PORQUE LES FACILITARA MUCHOS PORBLEMAS DE MANIPULACION DE TABLAS, CONSULTAR LA DOCUMENTACION DE SDK DE JAVA. 12.- observar tambien que los objetos resultset, statement y drivermanager(coneccin), deben cerrarse al final del programa, y se cierran en el mismo orden como fueron abiertos. 12.1.- como nota aclaratoria al ultimo punto si no se cierran resultset, statement y drivemanager() dentro del programa, el servidor bloqueara(locking) el acceso a la base de datos y ya no permitira mas uso de la base de datos, es facil saber cuando esta bloqueada una base de datos porque en el directorio donde se encuentra mibase.mdb ahora estara un nuevo archivo llamado mibase.ldb y no se puede eliminar con windows, para eliminarlo de manera normal parar el servidor de java lws y luego abrir mibase.mdb con el access normal y cerrar, con este proceso ya debera desaparecer la mase bloqueada (mibase.ldb). 12.2- mas claro an, NO OLVIDAR USAR LOS TRES CLOSE() que puse en el programa ejemplo. TAREAS PROGRAMACION JAVA JSP 1.- construir y desplegar una primera base de datos que contenga la primera tabla que disearn en el tema de tablas. 2.- Construir una segunda base de datos que contenga cuando menos tres de las tablas ya diseadas y desplegar cualquiera de ellas usando una sola forma html, donde el usuario selecciona cual quiere desplegar. UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS TEMA 8: INSERCION O ADICION DE REGISTROS SQL INSERT JAVA JSP Insertar o agregar registros o renglones nuevos a una tabla en disco, es un proceso sencillo que usa la siguiente instruccin sql: INSERT INTO TABLA(CAMPO1,CAMPO2..) VALUES(VALOR1,VALOR2..); Recordar que solo se esta usando lo minimo de cada instruccin sql es conveniente estudiar un tutorial de sql. Prog34.jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>

<%! int cargarclave(){

// funcion para cargar nueva clave del nuevo registro a insertar

int cla =0;

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

String strcon= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

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) {};

try {

tabla = instruccion.executeQuery("select * from mitabla");

// solo nos vamos al ultimo registro del resultset

tabla.last();

// y se lee la primera columna del ultimo renglon

cla = Integer.parseInt(tabla.getString(1));

// numreng=tabla.getRow();

tabla.close();instruccion.close(); canal.close();

} catch(SQLException ex){};

// ademas se debera regrasar incrementada en una unidad

return cla+1;

} //fin funcion cargarclave()

%>

<%

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

// objetos de enlace

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

String strcon= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

// cargando la nueva clave que tendra el registro a insertar

int clave;

clave= cargarclave();

// abriendo otra vez el canal o enlace en su propio try-catch

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) {};

//cargando los demas campos a grabar

String nombre = request.getParameter("NOMBRE");

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

// USANDO SQL insert into tabla values(clave, 'nom', edad);

String q="insert into mitabla values(" +clave +",'"+ nombre+"',"+edad+") ";

// cuidado con los apostrofes que debe llevar la string arriba

try {

// agregando renglon (insert)

int n=instruccion.executeUpdate(q);

//avisando que se hizo la instruccion

out.println("REGISTRO INSERTADO");

} catch(SQLException e) {out.println(e);};

try{

// observar que tabla.close() no se usa aqui porque no se regreso un resultset de la base en disco

// solo usar tabla.close() cuando se usa un SQL SELECT

instruccion.close();

canal.close();

} catch(SQLException e) {out.println(e);};

};

// construyendo forma dinamica

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

out.println("CLAVE :"+cargarclave()+"<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:

corrida prog 33:

El programa esta bien documentado. se usa el metodo RESULTSET.LAST() para irse al ultimo renglon de la tabla en memoria o RESULTSET. Luego se lee la primera columna del ultimo renglon de la tabla, para cargar la ultima clave grabada. El metodo o declaracion devuelve el valor de la ultima clave que esta en el ultimo renglon de la tabla, incrementada en una unidad. Se crea la string q, con el formato apropiado sql( como se dijo al principio de este tema). OBSERVAR QUE EXISTEN DOS METODOS PARA EL OBJETO STATEMENT: a) STATEMENT.EXECUTEQUERY() USARLO PARA SQL SELECT b) STATEMENT.EXECUTEUPDATE() USARLO PARA SQL INSERT, UPDATE, DELETE. TAREAS PROGRAMACION JAVA JSP 1.- construir muchos programas de inserccion en las tablas de las bases de datos que tengan construidas UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS TEMA 9: BUSQUEDA SQL SELECT JAVA JSP En este tema se analiza la busqueda de un registro o rengln determinado en este proceso el usuario del programa quiere que se despliegue un y solo un registro de

informacin proporcionando un dato de busqueda generalmente la clave del registro. La solucion es sencilla, solo usar otra vez la instruccion select, con el siguiente formato: SELECT [ *, all, campos] FROM TABLA WHERE clave=claveabuscar; Y RESULTSET.EXECUTEQUERY(). les recuerdo que deben buscar y estudiar un buen tutorial de sql. Prog35.jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>

<%

// declarando y creando objetos globales

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

String strcon= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

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

// abriendo canal o enlace en su propio try-catch

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) {};

// preparando condicion de busqueda

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

// construyendo select con condicion

String q="select * from mitabla where clave="+clave;

// mandando el sql a la base de datos

try { tabla = instruccion.executeQuery(q);

// mandando resultset a tabla html

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

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

bgcolor=White>NOMBRE</th><th

while(tabla.next()) {

out.println("<TR>");

out.println("<TD>"+tabla.getString(1)+"</TD>");

out.println("<TD>"+tabla.getString(2)+"</TD>");

out.println("<TD>"+tabla.getString(3)+"</TD>");

out.println("</TR>"); }; // fin while

out.println("</TABLE></CENTER></DIV></HTML>");

} //fin try no usar ; al final de dos o mas catchs

catch(SQLException e) {};

try {};

{tabla.close();instruccion.close();canal.close();}

catch(SQLException

e)

};

// construyendo forma dinamica

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

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

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

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

%>

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

TAREAS PROGRAMACION JAVA JSP 1.- hacer programas de busquedas para las bases y tablas que tengan UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS TEMA 10: FILTROS JAVA JSP Otro problema similar al anterior es el de filtros es decir en muchas ocasiones es necesario obtener informacin acerca de un subconjunto de renglones de la tabla. Por ejemplo todos los estudiantes que sean mayores de 17 aos, todos los clientes que sean de Tijuana, etc., a esto le llamamos filtros o condiciones. Tambien se resuelve de manera similar al anterior, es decir usando la instruccin select etc, from tabla, where CONDICION; con RESULTSET.EXECUTEQUERY(). Prog36.jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>

<%

// declarando y creando objetos globales

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

String strcon= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

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

// abriendo canal o enlace en su propio try-catch

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) {};

// preparando condicion de busqueda

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

String q="select * from mitabla where edad >="+edad;

// mandando el sql a la base de datos

try { tabla = instruccion.executeQuery(q);

// mandando resultset a tabla html

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

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

bgcolor=White>NOMBRE</th><th

while(tabla.next()) {

out.println("<TR>");

out.println("<TD>"+tabla.getString(1)+"</TD>");

out.println("<TD>"+tabla.getString(2)+"</TD>");

out.println("<TD>"+tabla.getString(3)+"</TD>");

out.println("</TR>"); }; // fin while

out.println("</TABLE></CENTER></DIV></HTML>");

} //fin try no usar ; al final de dos o mas catchs

catch(SQLException e) {};

try {};

{tabla.close();instruccion.close();canal.close();}

catch(SQLException

e)

};

// construyendo forma dinamica

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

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

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

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

%>

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

TAREAS PROGRAMACION JAVA JSP 1.- preparar programas de filtrado para sus bases de datos, recordar que sus formas html's deben construirlas con 2 combos y un text, suerte UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS TEMA 11: OPERACIONES CON CAMPOS JAVA JSP Este es tambien un caso comun con elementos de una tabla, sin embargo es tambien facil de resolver. Es necesario recordar primero algunas cosas elementales: 1.- Recordar que el numero de columna en una tabla empieza en 1, esto es que para realizar alguna operacin por ejemplo la columna edad del ejemplo que estamos siguiendo, su numero de columna es la 2. 2.- La operacin que se plantee se puede realizar con todos los renglones de la tabla o con un solo renglon de la tabla(del resultset). 3.- En el ejemplo se realiza la operacin con todos los renglones de la tabla y no olvidar que se tiene que usar la instruccion sql Update para que la nueva informacin se actualize en disco, recordar que los cambios que se hacen a la tabla, es realmente al resultset, que a su vez es una tabla o base de datos en la memoria de la maquina del cliente o usuario, y estos cambios hay que actualizarlos o pasarlos o UPDATE a la base de datos en disco. El siguiente programa le aumenta 50 a todas las edades. Prog37.jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>

<%

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

// declarando y creando objetos y variables

int edad, clave;

String q;

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

String strcon= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

// crando canal o enlace

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) {};

// cargando el resultet

try {

tabla = instruccion.executeQuery("select * from mitabla");

} catch(SQLException e) {};

// operaciones en el resultset

while(tabla.next()){

clave = tabla.getInt(1);

edad =tabla.getInt(3);

edad=edad+50;

// actualizacion

q="update mitabla set edad= "+edad+ " where clave = "+clave+";";

try{

instruccion.executeUpdate(q);

// cargando otra vez el resultset actualizado

tabla = instruccion.executeQuery("select * from mitabla");

// dejando apuntador en renglon apropiado

// absolute() es equivalente a un seek() en c++

tabla.absolute(clave);

}catch(SQLException e) {}; };//fin while

try {};

{canal.close();instruccion.close();tabla.close();}

catch(SQLException

e)

out.println("EDADES AUMENTADAS");

};

// construyendo forma dinamica

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

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

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

%>

nota: programa autoanotado.

corrida prog.jsp

TAREAS PROGRAMACION JAVA JSP 1.- construir una tabla en microsoft access que traiga matricula, nombre, calif1, calif2, calif3 y promedio, cargar en access unos 5 renglones de alumnos, no cargar promedio, el promedio lo deberan calcular con un programa. UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS TEMA 12: BAJA O ELIMINACION SQL DELETE JAVA JSP Eliminacin es otro proceso simple y comun con las bases de datos el modelo que estamos usando hace este tipo de operaciones muy faciles: La instruccin sql a usar es: DELETE FROM TABLA WHERE CONDICION Y RESULTSET.EXECUTEUPDATE() Prog38.jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>

<%

// declarando y creando objetos globales

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

String strcon= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

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

// abriendo canal o enlace en su propio try-catch

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) {};

// preparando condicion de eliminacion

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

// construyendo select con condicion eliminacion SQL DELETE

String q="delete from mitabla where clave = "+clave;

// mandando SQL a tabla en disco

try { instruccion.executeUpdate(q);

// avisando

out.println("registro eliminado");

} //fin try no usar ; al final de dos o mas catchs

catch(SQLException e) {}

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

try {

// no ocupa cerrar tabla()

instruccion.close();canal.close();} catch(SQLException e) {};

};

// construyendo forma dinamica

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

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

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

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

%>

Corridas : Prog -tabla original

pro38.html

prog33.jsp

TAREAS PROGRAMACION JAVA JSP 1.- construir este proceso para las tablas y bases de datos que tengan construidas. UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS TEMA 13: EDICION DE REGISTROS SQL UPDATE JAVA JSP Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacn o para corregir algun error de captura original o para agregar alguna columna que no existia por modificacin de la tabla o la base de datos. En general se tiene otro problema de sql UPDATE, sin embargo ahora se tendran que construir dos metodos uno de busqueda normal y otro de actualizacion estos metodos son: 1.- BUSQUEDA: programa normal de busqueda por clave, pero ahora debera construir una forma.html dinamica, que contendra un form action apuntando o ejecutandose a si mismo es decir prog39.jsp, ademas tendra todos los input text necesarios para cargar cada celda del renglon de busqueda. 2.- EDICION: recoje los datos ya modificados de la forma.html dinamica y realiza directamente un sql update en la base de datos prog39.jsp

<code> <%@ page import=java.io.*, java.util.*, java.net.*, java.sql.* %> <% metodo BUSCAR con forma dinamica if(request.getParameter(BUSCAR) != null) { Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String sitiobase = c:/pfacil/mibase.mdb; String strcon= jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ= + sitiobase; 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) {}; int clave = Integer.parseInt(request.getParameter(CLAVEB)); String q=select * from mitabla where clave=+clave; try { tabla = instruccion.executeQuery(q); tabla.next(); out.println(<FORM ACTION=prog39.jsp METHOD=POST>); out.println(CLAVE:<INPUT TYPE=TEXT NAME=CLAVE VALUE=+ tabla.getString(1)+ ><BR>); out.println(NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE VALUE= + tabla.getString(2)+ ><BR>); out.println(EDAD:<INPUT TYPE=TEXT NAME=EDAD VALUE= + tabla.getString(3)+ ><BR>); out.println(<INPUT TYPE=SUBMIT NAME=EDITAR VALUE=EDITAR><BR>); tabla.close();instruccion.close();canal.close(); } catch(SQLException e) {} catch(Exception ex){}; }; fin evento buscar evento EDITAR String temp2=request.getParameter(EDITAR); if(temp2==null)temp2= ; if(temp2.compareTo(EDITAR)==0) { String nombre,q ; int clave, edad; Connection canal = null; ResultSet tabla= null; Statement instruccion=null; String sitiobase = c:/pfacil/mibase.mdb; String strcon= jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ= + sitiobase; 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) {}; try { tabla = instruccion.executeQuery(select * from mitabla); } catch(SQLException e) {}; clave = Integer.parseInt(request.getParameter(CLAVE)); nombre = request.getParameter(NOMBRE); edad = Integer.parseInt(request.getParameter(EDAD)); q = UPDATE mitabla SET + NOMBRE='+ nombre+ ', EDAD=+ edad+ WHERE clave= + clave+;; try{instruccion.executeUpdate(q); }catch(SQLException e) {}; try {tabla.close();instruccion.close();canal.close();} catch(SQLException e) {}; out.println(REGISTRO EDITADO); }; fin evento editar construyendo forma out.println(<FORM ACTION=prog39.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>); %> <code> Veamos la corrida completa: (tabla

original) que

forma

dinamica construye

prog39.jsp

nueva tabla murcielago era batman!! 1.- TAREAS PROGRAMACION JAVA JSP programas de edicin para sus tablas y bases de datos UNIDAD 7: JAVA JSP INTRODUCION A LAS BASES DE DATOS TEMA 14: GRAFICOS JAVA JSP

no era construir

Campos de graficos o de imagenes, se han convertido en elementos importantes de cualquier base de datos. Para manejar este elemento con java-jsp existen dos maneras: 1.- Agregar un campo BLOB a la tabla en microsoft access y usar componentes especializados en imagenes tanto para subirlas como para desplegar la imagen. Este metodo provoca que la base de datos crezca mucho recordar que una imagen aun de tipo jpg ocupa mucho espacio. 2.- El segundo metodo es mas sencillo, primero subir las imagenes ( de preferencia jpg) con un ftp normal a tusitio y despues usar el tag <img src> de html y ademas agregar un campo de texto llamado fotourl o foto a la tabla en access y grabar la direccion http de la imagen en este campo, por ejemplohttp://programacionfacil.com/tusitio/pato.jpg Despues solo cargar este tag imageurl en la pagina que se construira que no es otra cosa que el programa de busqueda con el despliegue del campo extra, como lo muestra el programa ejemplo. Prog40.jsp

<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>

<%

// declarando y creando objetos globales

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String sitiobase = "c:/pfacil/mibase.mdb";

String strcon= sitiobase;

"jdbc:odbc:Driver={Microsoft

Access

Driver

(*.mdb)};DBQ="

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

// abriendo canal o enlace en su propio try-catch

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) {};

// preparando condicion de busqueda

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

// construyendo select con condicion

String q="select * from mitabla where clave="+clave;

// mandando el sql a la base de datos

try { tabla = instruccion.executeQuery(q);

// mandando resultset a tabla html

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

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

bgcolor=White>NOMBRE</th><th

while(tabla.next()) {

out.println("<TR>");

out.println("<TD>"+tabla.getString(1)+"</TD>");

out.println("<TD>"+tabla.getString(2)+"</TD>");

out.println("<TD>"+tabla.getString(3)+"</TD>");

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

// y lo del monton de \\\\\ ver el ultimo tema de la unidad anterior

out.println("</TR>"); }; // fin while

out.println("</TABLE></CENTER></DIV></HTML>");

} //fin try no usar ; al final de dos o mas catchs

catch(SQLException e) {};

try {};

{tabla.close();instruccion.close();canal.close();}

catch(SQLException

e)

};

// construyendo forma dinamica

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

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

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

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

%>

Corrida:

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

Anda mungkin juga menyukai