Download La Interfaz Collection
Document related concepts
no text concepts found
Transcript
Conceptos Avanzados Core Java Course No. CY420 Versión 4.0 Copyright © 2004 Conceptos Avanzados API de Colecciones Copyright © 2004 Conceptos Avanzados Objetivos de aprendizaje • Describir el marco de trabajo de las colecciones Java • Explicar las interfaces de colecciones • Describir los algoritmos polimórficos del JDK que operan en colecciones • Describir las implementaciones de colecciones Copyright © 2004 Conceptos Avanzados Estructura de las Colecciones en Java • Una colección puede ser vista básicamente como una Estructura de Datos • Una colección es un objeto usado para agrupar múltiples objetos como una unidad • La estructura de colecciones propuesta por Java está compuesta por interfaces, implementaciones y algoritmos (búsqueda y ordenamiento) todo esto forma las Estructuras de Datos • El marco de trabajo de colecciones permite almacenar, acceder, recuperar y manipular los elementos de las colecciones Copyright © 2004 Conceptos Avanzados API de Colecciones Copyright © 2004 Conceptos Avanzados La Interfaz Collection • La raíz de la jerarquía de colecciones es la interfaz Collection • Las clases concretas de colecciones implementan la interfaz Collection • La interfaz Collection se usa para pasar colecciones entre métodos y manipularlos cuando se requiere de una máxima generalización • Las implementaciones de colecciones de propósito general normalmente poseen un constructor con Collection como uno de sus parámetros Copyright © 2004 Conceptos Avanzados La Interfaz Collection public interface Collection { // Operaciones Básicas int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); boolean remove(Object element); Iterator iterator(); // Operaciones en Lotes boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); // Interoperabilidad Object[] toArray(); Object[] toArray(Object a[]); } Copyright © 2004 Conceptos Avanzados La Interfaz Collection import java.util.*; public class PruebaCollection { public static void main(String[] args) { Collection c = new Vector(); c.add("Hola");c.add("Mundo"); // Utilizamos un iterador para recorrer // la lista entera Iterator i = c.iterator(); while(i.hasNext()){ System.out.println(i.next()); } } } Copyright © 2004 Conceptos Avanzados La Interfaz Set • La interfaz Set representa a una colección de elementos donde ninguno de ellos está repetido • El método add retorna false si se intenta agregar un elemento que ya existe, no ocurre ningún cambio en el conjunto • Dos objetos Set que contengan los mismos objetos serán considerados iguales Copyright © 2004 Conceptos Avanzados La clase HashSet •HashSet es una implementación de Set, no garantiza el orden de los elementos •HashSet se usa para guardar los elementos de un Set en una tabla hash. import java.util.*; public class PruebaSet { public static void main(String[] args) { Set list = new HashSet(); //Continúa... Copyright © 2004 Conceptos Avanzados La clase HashSet list.add("a");list.add("e");list.add("i"); list.add("a");list.add("e");list.add("o"); list.add("i");list.add("u");list.add("u"); Iterator i = list.iterator(); while(i.hasNext()) System.out.println(i.next()); } }//Fin de la clase PruebaSet • Salida del programa o i a u e Copyright © 2004 Conceptos Avanzados La Interfaz SortedSet • La interfaz SortedSet extiende de la interfaz Set •SortedSet permite establecer una relación de orden entre sus elementos • El orden por defecto es ascendente y viene dado por la naturaleza del valor, o por un comparador que sea especificado en la instanciación • La interfaz SortedSet provee otros tres tipos de operaciones: • Rango-vista • Extremos • Acceso al comparador Copyright © 2004 Conceptos Avanzados La clase TreeSet •TreeSet proporciona una implementación de la interfaz Set que garantiza el orden en la iteración. •Los objetos se ordenan en orden ascendente y se almacenan en la forma de un árbol de búsqueda binaria import java.util.*; public class PruebaSortedSet{ public static void main(String[] args) { SortedSet list = new TreeSet(); list.add("a");list.add("e");list.add("i"); list.add("a");list.add("e");list.add("o"); list.add("i");list.add("u");list.add("u"); //Continúa... Copyright © 2004 Conceptos Avanzados La clase TreeSet Iterator i = list.iterator(); while(i.hasNext()){ System.out.println(i.next()); } } }//Fin de la clase PruebaSortedSet • Salida del programa a e i o u Copyright © 2004 Conceptos Avanzados La Interfaz List • Una lista es una colección ordenada • Mantiene un índice de los elementos que denota la posición del elemento en la lista • Las listas permiten elementos duplicados •List provee operaciones que permiten: - Acceder a un elemento especificando su posición - Buscar un elemento específico - Realizar operaciones de iteración en la lista - Realizar operaciones de rango Copyright © 2004 Conceptos Avanzados La clase Vector • Vector es una implementacion de List • El tamaño de un Vector se puede modificar dinámicamente • Los vectores sólo pueden guardar referencias del tipo java.lang.Object • Los vectores pueden almacenar cualquier combinación de tipos de datos de objetos. • El método elementAt(index) de la clase Vector se usa para recuperar una referencia dada en el índice especificado Copyright © 2004 Conceptos Avanzados List y Vector import java.util.*; public class PruebaList { public static void main(String[] args) { List list = new Vector(); for(int i=1;i<=20;i++) list.add(i+""); ListIterator i = list.listIterator(); while(i.hasNext()) if(Integer.parseInt(i.next()+"")%2 != 0) i.remove(); i.add("."); //Continúa... Copyright © 2004 Conceptos Avanzados List y Vector while(i.hasPrevious()) System.out.println(i.previous()); } }//Fin de la clase PruebaList • Salida del programa . 20 18 16 14 12 10 ... Copyright © 2004 Conceptos Avanzados La Clase ArrayList • Provee un arreglo dinámico • La lista contenida puede expandirse o contraerse dinámicamente, lo que no es posible hacer con arreglos • No posee los métodos legados de Vector elementAt() addElement() La Clase LinkedList • Provee al igual que las dos anteriores un arreglo dinámico • Tiene un constructor sobrecargado LinkedList(Collection c), que construye una lista enlazada con los elementos de la colección c Copyright © 2004 Conceptos Avanzados La Interfaz Map • Un mapa es una colección de pares de elementos clave-valor correlacionados entre sí Map El conjunto de claves, por ser un conjunto, no permite que hayan elementos duplicados Claves Valores 2342 Jose 8321 Maria 232 Carlos 9087 Juan 1232 Pedro La colección de valores permite cualquier cantidad de elementos repetidos Copyright © 2004 Conceptos Avanzados La Clase Hashtable • La clase Hashtable es una implementación de la interfaz Map • Una tabla hash es una estructura de datos que relaciona claves con valores • Se usa bajo las circunstancias donde un acceso secuencial no es necesario La Clase HashMap • Implementa de mejor forma la interfaz Map a diferencia del Hashtable no es sincronizada y permite null Copyright © 2004 Conceptos Avanzados La Interfaz Map import java.util.*; public class PruebaMap { private static final Integer ONCE = new Integer(1); public static void main(String args[]) { Map map = new HashMap(); for (int j=0; j<args.length; j++) { Integer frequency = (Integer) map.get(args[j]); map.put(args[j], (frequency==null ? ONCE : new Integer(frequency.intValue() + 1))); } System.out.println(" N# de palabras distintas: " + map.size()); //Continúa... Copyright © 2004 Conceptos Avanzados La Interfaz Map System.out.println(map); } }//Fin de la clase PruebaMap • Dada la siguiente línea: java PruebaMap Esta es la clase de Map de la materia Core Java • La salida es: N# de palabras distintas: 9 {Core=1, Map=1, Java=1, materia=1, Esta=1} de=2, clase=1, la=2, es=1, Copyright © 2004 Conceptos Avanzados La Interfaz SortedMap • La interfaz SortedMap es una subclase de la interfaz Map • Mantiene sus entradas en orden ascendente, ordenando de acuerdo a la naturaleza de las claves, o de acuerdo al comparador provisto • Las operaciones de comparaciones entre elementos se llevan a cabo con el método compareTo Copyright © 2004 Conceptos Avanzados La clase TreeMap •TreeMap proporciona una implementación de la interfaz SortedMap que usa un árbol de búsqueda binario para el almacenamiento. • Se guardan los objetos en orden ascendente. • Los tiempos de acceso y recuperación son rápidos, lo que hace que la clase TreeMap sea una opción excelente para guardar cantidades grandes de información ordenada que necesita ser encontrada rápidamente. Copyright © 2004 Conceptos Avanzados La Interfaz Enumeration • La interfaz Enumeration se puede usar para recorrer cada elemento de la colección La Interfaz Iterator • La interfaz Iterator permite recorrer de forma secuencial los distintos elementos que conforman una colección • El iterador de una colección permite remover elementos de dicha colección basado en una semántica bien definida Copyright © 2004 Conceptos Avanzados La Interfaz ListIterator • Extiende de Iterator y provee métodos adicionales para la manipulación de de listas • Esta interfaz permite recorrido hacia delante y hacia atrás en la lista La Interfaz Comparator • Esta interfaz permite controlar el orden en colecciones ordenadas Copyright © 2004 Conceptos Avanzados La Clase Collections • Esta clase, tiene un conjunto de métodos estáticos que son básicamente algoritmos asociados a estructuras de datos • Los métodos incluyen: ordenamiento, búsqueda, desordenar, inversión del orden de la colección import java.util.*; public class PruebaCollection1{ public static void main(String[] args) { List l = new Vector(); for(int i = 65;i < 91;i++) l.add((char)i+""); Collections.shuffle(l); //Continúa... Copyright © 2004 Conceptos Avanzados La Clase Collections System.out.println(l); Collections.sort(l); System.out.println(l); int pos = Collections.binarySearch(l,"P"); System.out.println("Encontrado en: "+pos); } }//Fin de la clase PruebaCollection1 • Salida del programa [F, R, J, V, L, A, W, C, M, E, X, G, [A, B, C, D, E, F, Q, R, S, T, U, V, Encontrado en: 15 Y, U, G, W, N, D, H, X, P, O, I, Y, Z, I, T, S, H, Q, K, B] J, K, L, M, N, O, P, Z] Copyright © 2004 Conceptos Avanzados Conjunto Unitario(Singleton Set) • En Java, se puede obtener un conjunto unitario a través del método Collections.singleton. • Se puede usar para quitar todas las ocurrencias de un elemento específico en una colección La Clase Arrays • Esta clase tiene un conjunto de métodos estáticos que permiten que los arreglos sean convertidos en listas • Tiene operaciones para búsqueda y ordenamiento Copyright © 2004 Conceptos Avanzados Colecciones en Diferentes Escenarios Copyright © 2004 Conceptos Avanzados Resumen • Se entendió la estructura de colecciones en Java • Se explicaron las interfaces collection • Se aprendió acerca de algoritmos polimórficos del JDK que operan sobre colecciones • Se aprendió acerca de algunas implementaciones de colecciones Copyright © 2004 Conceptos Avanzados JDBC Copyright © 2004 Conceptos Avanzados Objetivos de Aprendizaje • Aprender acerca de la conectividad a base de datos en Java • Entender acerca de la API Java JDBC • Discutir acerca de sentencias SQL usadas en programas Java • Enseñar cómo tratar con el manejo de excepciones en JDBC Copyright © 2004 Conceptos Avanzados Introducción • Java proporciona conectividad a muchos tipos de base de datos a través de su API de Conectividad a Base de Datos Java ( Java Data Base Connectivity - JDBC) • Para desarrollar programas que interactuen con bases de datos en Java, se requiere esencialmente: - Una base de datos relacional - Una interfaz con Java (a través del API JDBC) - Conocimiento básico de las sentencias SQL Copyright © 2004 Conceptos Avanzados Pasos Involucrados en el Acceso a Bases de Datos 1. Se debe cargar en memoria el controlador (driver) que habilitará la conexión entre el programa Java y el sistema de base de datos 2. A través de este controlador, se establece una conexión a la base de datos 3. Una vez establecida la conexión, por medio de esta se ejecutan las sentencias SQL que sean requeridas 4. Al finalizar se debe cerrar todas las conexiones a bases de datos que estén activas Copyright © 2004 Conceptos Avanzados El API JDBC • Algunas de las clases e interfaces de esta api son: – java.sql.DriverManager – java.sql.Driver – java.sql.Connection – java.sql.Statement – java.sql.ResultSet – java.sql.ResultSetMetaData – java.sql.DabataseMetaData – java.sql.PreparedStatement – java.sql.CallableStatement Copyright © 2004 Conceptos Avanzados Relación entre las Clases e Interfaces JDBC DriverManager utiliza «interface» Driver crea «interface» Connection genera «interface» Statement genera retorna «interface» «interface» DatabaseMetaData ResultSet genera «interface» ResultSetMetaData Copyright © 2004 Conceptos Avanzados Tipos de Controladores JDBC • JDBC provee cuatro tipos de controladores: - Controlador JDBC-ODBC (Tipo 1) - Controlador API-Nativo (Tipo 2) - Controlador de Protocolo de Red (Tipo 3) - Controlador Protocolo-Nativo (Tipo 4) Copyright © 2004 Conceptos Avanzados Cargar el Controlador • Para cargar el controlador, se debe usar el método forName en la clase Class con el nombre del controlador como argumento • Ejemplos del proceso de carga de un driver: - MS Access y MS SQL Server Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); - IBM UDB DB2 Class.forName("COM.ibm.db2.jdbc.app.DB2Driver"); - MySQL Class.forName("com.mysql.jdbc.Driver"); - PostgreSQL Class.forName("org.postgresql.Driver"); Copyright © 2004 Conceptos Avanzados Crear una Conexión • La clase DriverManager es responsable por buscar las diferentes implementaciones JDBC que puedan existir en un sistema y administrar los controladores JDBC • La clase DriverManager provee un método llamado getConnection(), por medio de este se puede obtener una conexión a una bases de datos • Este método toma tres argumentos: – El URL de la base de datos protocol:<subprotocol>:<subname> – Identificación del usuario – Clave del usuario Copyright © 2004 Conceptos Avanzados Crear una Conexión import java.sql.*; public class PruebasJDBC { public static void main(java.lang.String[] args) { Connection conn = null; try { Class.forName("COM.ibm.db2.jdbc.app.DB2Driver"); System.out.println("Driver cargado..."); conn = DriverManager.getConnection( "jdbc:db2:Sample", "db2admin", "db2admin"); System.out.println("Conexión establecida..."); } catch (ClassNotFoundException e) { System.out.println("Driver no encontrado"); } catch (SQLException e) { System.out.println("Error DB: " + e); } finally { try { if (conn != null) conn.close(); Debemos realizar un } catch (SQLException se){} manejo adecuado de } las excepciones que } pueden generarse } Copyright © 2004 Conceptos Avanzados Crear Objetos Statement • Las sentencias SQL más usadas son las siguientes: – UPDATE – INSERT – DELETE – SELECT • La interfaz Statement provee métodos para hacer estas llamadas • El método executeUpdate() retorna el numero de registros afectados por la sentencia SQL • El método executeQuery() retorna el conjunto de registros seleccionados por la consulta (ResultSet) Copyright © 2004 Conceptos Avanzados Crear Objetos Statement import java.sql.*; public class PruebasJDBC1 { public static void main(String[] args) { Connection conn = null; String u = "db2admin"; String p = "db2admin"; String drv = "COM.ibm.db2.jdbc.app.DB2Driver"; try { Class.forName(drv); conn = DriverManager.getConnection( "jdbc:db2:IBM",u,p); Statement stmt = conn.createStatement(); String sql = "INSERT INTO ESTUDIANTE "+ "VALUES('Pedro','Perez',123)"; stmt.executeUpdate(sql); System.out.println("Actualización exitosa "); } catch (Exception e){ System.out.println("Error: "+e); }finally { try {if (conn != null)conn.close();} catch (SQLException se){} } } } Copyright © 2004 Conceptos Avanzados Usar ResultSet • Al utilizar el método executeQuery() de un Statement, es necesario utilizar una referencia a la interfaz ResultSet para manipular los datos retornados por el Statement • Para iterar a través de un ResultSet se utiliza el método next(), que permite mover el cursor desde su posición actual hasta el proximo registro • Inicialmente el cursor del ResultSet se encuentra antes del primer registro Copyright © 2004 Conceptos Avanzados Usar ResultSet • La interfaz ResultSet provee una serie de métodos que permiten extraer los datos contenidos en el registro apuntado por el cursor, entre estos se tienen: - int getInt(String); int getInt(int); - String getString(String); String getString(int); - float getFloat(String); float getFloat(int); • Existe un par de métodos similares para cada tipo de dato compatible con SQL Copyright © 2004 Conceptos Avanzados Usar ResultSet import java.sql.*; public class PruebasJDBC2 { public static void main(String[] args) { ... try { ... Statement stmt = conn.createStatement(); String sql = "SELECT * FROM ESTUDIANTE"; ResultSet r = stmt.executeQuery(sql); while(r.next()) System.out.println(r.getString("nombre")+ " "+ r.getInt("ci")); } catch (Exception e){ System.out.println("Error: "+e); }finally { try {if (conn != null)conn.close();} catch (SQLException se){} } } } Copyright © 2004 Conceptos Avanzados Interfaces MetaData • La palabra Metadata implica información acerca de información • La interfaz ResultSetMetaData provee información acerca de los objetos ResultSet • La clase DatabaseMetaData está relacionado con el objeto Connection. Por medio de esta se puede obtener información de la base de datos a la cual se está conectado por medio de Connection Copyright © 2004 Conceptos Avanzados ResultSetMetaData • Algunos de los métodos contenidos en esta interfaz son los siguientes: - int getColumnCount() - String getColumnLabel(int column) - String getColumnName(int column) - String getTableName(int column) - int isNullable(int column) - boolean isReadOnly(int column) Copyright © 2004 Conceptos Avanzados DatabaseSetMetaData • Alguno de los métodos contenidos en esta interfaz son los siguientes: - String getDriverName() - String getURL() - String getUserName() - boolean isReadOnly() Copyright © 2004 Conceptos Avanzados Resumen • Se aprendió acerca de conectividad a base de datos en Java • Se entendió el Java JDBC API • Se discutió acerca de sentencias SQL usadas en programas Java • Se presentó cómo se trata el el manejo de excepciones Copyright © 2004 Conceptos Avanzados JDBC Avanzado Copyright © 2004 Conceptos Avanzados Objetivos de Aprendizaje • Describir el uso de las interfaces herederas de la interfaz Statement • Explicar los procedimientos almacenados • Explicar las funcionalidades de: - manejo de transacciones - soporte a cursores - el procesamiento de múltiples resultados de JDBC • Discutir algunas clases de soporte JDBC en Java Copyright © 2004 Conceptos Avanzados Extensiones de la Interfaz Statement • La especificación JDBC provee dos clases adicionales, provenientes de la interfaz Statement para permitir al programador realizar programación sofisticada de base de datos • Estas interfaces son: – PreparedStatement – CallableStatement Copyright © 2004 Conceptos Avanzados PreparedStatement • Existe una manera de crear sentencias SQL una vez y usarla cada vez que quiera correrla • Esto se logra a través de PreparedStatement de JDBC • Esta interfaz permite construir las sentencias SQL requeridas una vez y ejecutarlas cualquier número de veces en la aplicación • Cuando un objeto PreparedStatement es creado, la sentencia SQL se da como argumento • La sentencia SQL debe ser enviada al DBMS inmediatamente donde es compilada una vez Copyright © 2004 Conceptos Avanzados PreparedStatement • En tiempo de construcción el PreparedStatement no conoce los valores que determinan el resultado de su ejecución • Solo las posiciones de dichos valores son conocidas en el momento de su creación, las mismas son indicadas con el símbolo “?” PreparedStatement ps; ps = conn.preparedStatement("select * from tabla "+ "where c1=? ") Copyright © 2004 Conceptos Avanzados PreparedStatement import java.sql.*; public class PruebasJDBCPrepared { static String db="jdbc:db2:IBM"; static String drv="COM.ibm.db2.jdbc.app.DB2Driver"; public static void main(String []args){ Connection conn = null; PreparedStatement ps = null; try{ Class.forName(drv); conn = DriverManager. getConnection(db,"db2admin","db2admin"); String sql = "select * from estudiante where ci=?"; ps = conn.prepareCall(sql); ps.setInt(1,123); ResultSet rs = ps.executeQuery(); //Continúa... Copyright © 2004 Conceptos Avanzados PreparedStatement if(rs.next()) System.out.println("Encontrado"); else System.out.println("No Encontrado"); }catch(Exception e){ System.out.println("Error: "+e); }finally{ try{ if(conn!=null) conn.close(); }catch(Exception e){} } } }//Fin de la clase PruebasJDBCPrepared Copyright © 2004 Conceptos Avanzados Procedimientos Almacenados • Un procedimiento almacenado (stored procedure) permite asociar un conjunto de sentencias SQL a un único nombre, para luego ejecutarlas haciendo uso de ese nombre en cualquier momento • Los procedimientos almacenados son muy rápidos, ya que se ejecutan dentro de la base de datos y están previamente compilados • Por medio de los objetos de la interfaz CallableStatement se pueden ejecutar dentro del código Java Copyright © 2004 Conceptos Avanzados Otras Funcionalidades JDBC Administración de Transacciones Soporte de cursores Procesamiento de resultados múltiples • Algunos de estos pueden no ser soportados por todas las implementaciones JDBC • Se presenta la sintaxis básica de uso de estas funcionalidades. • Dependiendo del DBMS, se contará con el soporte de estas características Copyright © 2004 Conceptos Avanzados Administración de Transacciones • Una transacción puede ser definida como un conjunto de operaciones que deben ser ejecutadas como una unidad • De fallar una de las operaciones, falla en su totalidad la transacción • Una transacción es una “unidad de trabajo” • Cuando se realiza cualquier operación de INSERT, UPDATE o DELETE ésta se ejecuta con auto-commit explícito por omisión • Para habilitar control sobre las transacciones de la base de datos se usa el método setAutoCommit(boolean autoCommit) Copyright © 2004 Conceptos Avanzados Administración de Transacciones ... try{ // Auto commit deshabilitado conn.setAutoCommit(false); // Insertamos en la primera tabla stmt = conn.createStatement(); stmt.executeUpdate("INSERT INTO table1 ..."); stmt.close(); // Insertamos en la segunda tabla stmt = conn.createStatement(); stmt.executeUpdate("INSERT INTO table2 ..."); stmt.close(); // Compromete los cambios en la base de datos conn.commit(); }catch(SQLException e){ try { conn.rollback(); }catch( SQLException sqle2 ){} }... Copyright © 2004 Conceptos Avanzados Soporte de Cursores • JDBC provee soporte limitado de cursores. • Permite a una aplicación obtener un cursor asociado con el resultado a través del método de ResultSet.getCursorName() • El desplazamiento dentro del cursor es provisto recientemente en las implementaciones de JDBC, algunos controladores pueden no permitirlo • Para hacer uso de cursores desplazables se debe activar esta característica Copyright © 2004 Conceptos Avanzados Soporte de Cursores • Lo primero es utilizar los siguientes métodos para crear las sentencias y las sentencias preparadas: - Statement createStatement(int type, int concurrency) - PreparedStatement prepareStatement(String sql,int type, int concurrency) • type puede ser cualquiera de las siguientes constantes: TYPE_FORWARD, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE • concurrency puede ser cualquiera de las siguientes constantes: CONCUR_READ_ONLY, CONCUR_UPDATABLE Copyright © 2004 Conceptos Avanzados Soporte de Cursores • Algunos de los métodos disponibles para el movimiento del cursor son: Método Descripción absolute(int) Para moverse a una fila específica en el resultado afterLast() Para moverse al final del resultado, después de la última fila beforeFirst() Para moverse al inicio del resultado, antes de la primera fila first() Para moverse a la primera fila del resultado last() Para moverse a la última fila del resultado previous() Para moverse a la fila anterior, similar a next() Copyright © 2004 Conceptos Avanzados Soporte de Cursores Uso típico de cursores: stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery("SELECT * FROM tableName”); rs.absolute(7); System.out.println(rs.getString(1)); while (rs.next(){ // ... } rs.beforeFirst(); while (rs.next()) { // ... } Copyright © 2004 Conceptos Avanzados Múltiples Resultados • Especialmente con procedimientos almacenados, se puede estar interesados en una aplicación que retorne múltiples resultados • Para obtenerlos, se debe hacer uso de los siguientes métodos: boolean getMoreResults(); ResulSet getResultSet(); Copyright © 2004 Conceptos Avanzados Múltiples Resultados • Un uso típico de esta característica es el siguiente: ... while(stmt.getMoreResults()) { rs = stmt.getResultSet(); while (rs.next()) { // algunas tareas } } ... Copyright © 2004 Conceptos Avanzados Clases de Soporte JDBC • Algunas de las clases de soporte son las siguientes: SQLException SQLWarning DataTruncation Date, Time y Timestamp Types Copyright © 2004 Conceptos Avanzados Resumen • Se entendió como usar clases heredadas de Statement • Se aprendió acerca de procedimientos almacenados • Se discutió acerca de otras funcionalidades JDBC: - como administración de transacciones, - soporte de cursores y - procesamiento de resultados múltiples. • Se listaron algunas de las clases de soporte JDBC en Java Copyright © 2004 Conceptos Avanzados Características Avanzadas Copyright © 2004 Conceptos Avanzados Objetivos de Aprendizaje • Exponer los aspectos de seguridad que aplican cuando se trabaja con programas Java • Describir los conceptos de internacionalización en Java • Definir JavaBeans • Discutir el empaquetado de componentes en Java • Escribir código que use correctamente los métodos más importantes de la clase java.lang.Math Copyright © 2004 Conceptos Avanzados Seguridad • El principal objetivo de la seguridad en Java es controlar el acceso a los recursos del computador incluyendo todos sus dispositivos • Algunos conceptos importantes de la seguridad son: - Identificación - Autenticación - Autorización - Integridad de los datos - Encriptamiento - Auditoría Copyright © 2004 Conceptos Avanzados Modelo de Seguridad de Java Copyright © 2004 Conceptos Avanzados Modelo de Seguridad de Java • El Conjunto de Instrucciones de la JVM: Es la base de la seguridad de Java, las instrucciones de la JVM, no acceden directamente a la memoria sino que lo hacen de una forma simbólica • El Cargador de Clases: Es responsable de verificar la clase que se esta cargando, verifica nombres, dependencias, prioridades en la carga, cache • El Verificador de Bytecodes: Revisa el bytecode por inicialización de variables, verificación de métodos, reglas de acceso, desbordamiento de la pila • El Administrador de Seguridad: Usa una política de seguridad para determinar los accesos Copyright © 2004 Conceptos Avanzados Archivo de Políticas de Seguridad • Una política de seguridad asocia al código fuente directamente con un conjunto de permisos y puede ser creada usando la herramienta de políticas del SDK • El archivo jre\lib\security\java.security contiene entradas que identifican la política a ser usada • El formato del archivo de políticas permite a los desarrolladores conceder confianza a código sin firmar de una localización específica, o código posiblemente sin firmar de cualquier situación Copyright © 2004 Conceptos Avanzados Firmas Digitales • En la sección anterior, se hablaba acerca del archivo de políticas de seguridad y las formas de conceder acceso al recurso dependiendo de la firma. El tipo de firma referido aquí, es la firma digital. • Una firma digital es el proceso en el que las llaves públicas y privadas son producidas y se relacionan matemáticamente Copyright © 2004 Conceptos Avanzados Certificados Digitales • Los certificados digitales se usan estrechamente con las firmas digitales • Junto con la verificación de la identidad del desarrollador del código, los certificados pueden usarse para verificar, adicionalmente, si el código vino de una fuente no familiar confiable. • Un certificado firmado presenta e identifica una llave pública. Una tercera autoridad de certificación verifica que puede confiarse en el emisor Copyright © 2004 Conceptos Avanzados Internacionalización • La Internacionalización es el proceso de diseñar una aplicación que pueda ser adaptada a varios lenguajes y regiones. • Localización es el proceso de adaptar software a un lenguaje o región específica, por medio de la traducción de texto y la adición de componentes específicos a la región. Copyright © 2004 Conceptos Avanzados Internacionalización • Para poder incluir la internacionalización en programas Java, los siguientes pasos son esenciales: • Crear un archivo properties • Crear un objeto Locale. • Crear un objeto ResourceBundle. • Obtener la cadena del objeto ResourceBundle. Copyright © 2004 Conceptos Avanzados JavaBeans • En Java, se tiene el concepto de componentes • Los componentes son unidades de software autocontenidas y reusables. • Las tecnologías de componentes se incorporan a la plataforma Java a través del concepto de JavaBeans • Estos componentes reusables exponen sus características a las herramientas constructoras para manipulación visual. • La tecnología de componentes ofrecida por Java es independiente de la plataforma. Copyright © 2004 Conceptos Avanzados JavaBeans • Las características que distinguen un JavaBean de una simple clase de Java son: - Introspección - Persistencia - Personalización - Manejo de Eventos - Propiedades Copyright © 2004 Conceptos Avanzados Empaquetar Componentes • El empaquetamiento asegura que cuando se instala una aplicación todos los archivos necesarios son parte de la aplicación • El empaquetamiento ofrece además a los JavaBeans manejo de versiones, firmas electrónicas y sellado de paquetes • Para crear un archivo JAR se usa el siguiente comando: jar cvf jar-name archivo-class1 archivo-class2... • Para examinar los contenidos de un archivos JAR se usa: jar tvf jar-name Copyright © 2004 Conceptos Avanzados Clase java.lang.Math • Esta clase contiene métodos para resolver operaciones numéricas básicas, tales como: cálculo de logaritmo, raíz cuadrada, valor absoluto, funciones trigonométricas • Algunos de sus métodos son: Método Descripción abs(int a) Calcula el valor absoluto de a max(int a, int b) Retorna el máximo valor entre a y b min(int a, int b) Retorna el mínimo valor entre a y b round(float a) Realiza un redondeo del valor de a pow(double a, double b) Calcula y retorna el valor de a elevado al valor de b Copyright © 2004 Conceptos Avanzados Resumen • Se explicaron los mecanismos de seguridad cuando se trabaja con programas Java • Se describieron los conceptos de internacionalización • Se explicí el concepto de JavaBeans • Se explicó el empaquetamiento de componentes • Se describió la clase java.lang.Math Copyright © 2004