copyright © 2004 conceptos avanzados course no. cy420 versión 4.0 core java

85
Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java Core Java

Upload: benito-zuniga-figueroa

Post on 24-Jan-2016

231 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Course No. CY420

Versión 4.0

Core JavaCore Java

Page 2: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

API de ColeccionesAPI de Colecciones

Page 3: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Objetivos de aprendizajeObjetivos 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

Page 4: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Estructura de las Colecciones en JavaEstructura 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

Page 5: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

API de ColeccionesAPI de Colecciones

Page 6: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz CollectionCollection

• 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

Page 7: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz CollectionCollectionpublic 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[]);}

Page 8: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

}

}

}

La Interfaz La Interfaz CollectionCollection

Page 9: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz SetSet

• 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

Page 10: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La clase La clase HashSetHashSet•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...

Page 11: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La clase La clase HashSetHashSet

• Salida del programa oiaue

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

Page 12: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz SortedSetSortedSet• 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

Page 13: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

•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

La clase La clase TreeSetTreeSet

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

Page 14: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Iterator i = list.iterator();

while(i.hasNext()){

System.out.println(i.next());

}

}

}//Fin de la clase PruebaSortedSet

La clase La clase TreeSetTreeSet

• Salida del programa aeiou

Page 15: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz ListList

• 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

Page 16: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La clase La clase VectorVector

• 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

Page 17: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

List List yy Vector Vectorimport 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...

Page 18: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

List List yy Vector Vector

• Salida del programa .201816141210

...

while(i.hasPrevious())

System.out.println(i.previous());

}

}//Fin de la clase PruebaList

Page 19: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Clase La Clase ArrayListArrayList• 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 La Clase LinkedListLinkedList• 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

Page 20: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz MapMap

• Un mapa es una colección de pares de elementos clave-valor correlacionados entre sí

2342 Jose

8321 Maria

232 Carlos

9087 Juan

Map

Claves Valores

1232 Pedro

El conjunto de claves, por ser un

conjunto, no permite que hayan elementos

duplicados

La colección de valores permite

cualquier cantidad de elementos repetidos

Page 21: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Clase La Clase HashtableHashtable

• 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 La Clase HashMapHashMap• Implementa de mejor forma la interfaz Map a diferencia

del Hashtable no es sincronizada y permite null

Page 22: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz MapMap

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

Page 23: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz MapMap

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, de=2, clase=1, la=2, es=1,

materia=1, Esta=1}

Page 24: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz SortedMapSortedMap

• 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

Page 25: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

La clase La clase TreeMapTreeMap

Page 26: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz EnumerationEnumeration• La interfaz Enumeration se puede usar para recorrer

cada elemento de la colección

La Interfaz La Interfaz IteratorIterator

• 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

Page 27: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Interfaz La Interfaz ListIteratorListIterator• 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 La Interfaz ComparatorComparator

• Esta interfaz permite controlar el orden en colecciones ordenadas

Page 28: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Clase La Clase CollectionsCollections• 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...

Page 29: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

La Clase La Clase CollectionsCollectionsSystem.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, Y, N, P, Z, I, T, S, H, Q, K, W, C, M, E, X, G, U, D, O, B]

[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]

Encontrado en: 15

Page 30: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• 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

Conjunto Unitario(Conjunto Unitario(Singleton Set)Singleton Set)

La Clase La Clase ArraysArrays• 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

Page 31: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Colecciones en Diferentes EscenariosColecciones en Diferentes Escenarios

Page 32: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

ResumenResumen

• 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

Page 33: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

JDBCJDBC

Page 34: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Objetivos de AprendizajeObjetivos 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

Page 35: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

IntroducciónIntroducció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

Page 36: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Pasos Involucrados en el AccesoPasos Involucrados en el Acceso a Bases de Datosa 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

Page 37: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

El API JDBCEl 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

Page 38: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Relación entre las Clases e Relación entre las Clases e Interfaces JDBCInterfaces JDBC

DriverManager

«interface»

Connection

«interface»

ResultSet

«interface»

Statement

«interface»

DatabaseMetaData

«interface»

ResultSetMetaData

«interface»

Driverutiliza

crea

genera

genera retorna

genera

Page 39: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Tipos de Controladores JDBCTipos 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)

Page 40: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Cargar el ControladorCargar 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");

Page 41: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Crear una ConexiónCrear 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 datosprotocol:<subprotocol>:<subname>

– Identificación del usuario

– Clave del usuario

Page 42: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Crear una ConexiónCrear una Conexiónimport 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(); } catch (SQLException se){} } }}

Debemos realizar un manejo adecuado de las excepciones que pueden generarse

Page 43: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Crear Objetos Crear Objetos StatementStatement• 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)

Page 44: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

Crear Objetos Crear Objetos StatementStatement

Page 45: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Usar Usar ResultSetResultSet

• 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

Page 46: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Usar Usar ResultSetResultSet

• 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

Page 47: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

Usar Usar ResultSetResultSet

Page 48: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Interfaces MetaDataInterfaces 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

Page 49: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

ResultSetMetaDataResultSetMetaData

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

Page 50: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

DatabaseSetMetaDataDatabaseSetMetaData

• Alguno de los métodos contenidos en esta interfaz son los siguientes:

- String getDriverName()- String getURL()- String getUserName()- boolean isReadOnly()

Page 51: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

ResumenResumen

• 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

Page 52: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

JDBC AvanzadoJDBC Avanzado

Page 53: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Objetivos de AprendizajeObjetivos 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

Page 54: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Extensiones de la Interfaz Extensiones de la Interfaz StatementStatement

• 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

Page 55: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

PreparedStatementPreparedStatement

• 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

Page 56: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

PreparedStatementPreparedStatement

• 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=? ")

Page 57: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

PreparedStatementPreparedStatement

Page 58: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

PreparedStatementPreparedStatement

Page 59: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Procedimientos Almacenados 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

Page 60: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Otras Funcionalidades JDBC 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

Page 61: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Administración de Transacciones 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)

Page 62: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

Administración de Transacciones Administración de Transacciones

Page 63: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Soporte de CursoresSoporte 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

Page 64: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Soporte de CursoresSoporte 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

Page 65: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• 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()

Soporte de CursoresSoporte de Cursores

Page 66: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

// ...

}

Soporte de CursoresSoporte de Cursores

Page 67: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Múltiples ResultadosMú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();

Page 68: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• Un uso típico de esta característica es el siguiente: ...

while(stmt.getMoreResults()) {

rs = stmt.getResultSet(); while (rs.next()) {

// algunas tareas

}

}

...

Múltiples ResultadosMúltiples Resultados

Page 69: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Clases de Soporte JDBC Clases de Soporte JDBC • Algunas de las clases de soporte son las siguientes:

SQLException

SQLWarningDataTruncationDate, Time y TimestampTypes

Page 70: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Resumen 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

Page 71: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Características Características

AvanzadasAvanzadas

Page 72: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Objetivos de AprendizajeObjetivos 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

Page 73: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

SeguridadSeguridad

• 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

Page 74: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Modelo de Seguridad de JavaModelo de Seguridad de Java

Page 75: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• 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

Modelo de Seguridad de JavaModelo de Seguridad de Java

Page 76: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• 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

Archivo de Políticas de SeguridadArchivo de Políticas de Seguridad

Page 77: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• 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

Firmas DigitalesFirmas Digitales

Page 78: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• 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

Certificados DigitalesCertificados Digitales

Page 79: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

InternacionalizaciónInternacionalizació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.

Page 80: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

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

InternacionalizaciónInternacionalización

Page 81: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• En Java, se tiene el concepto de componentes

• Los componentes son unidades de software auto-contenidas 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.

JavaBeansJavaBeans

Page 82: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

• Las características que distinguen un JavaBean de una simple clase de Java son:

- Introspección

- Persistencia

- Personalización

- Manejo de Eventos

- Propiedades

JavaBeansJavaBeans

Page 83: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

Empaquetar ComponentesEmpaquetar 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

Page 84: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

ClaseClase java.lang.Math 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

Page 85: Copyright © 2004 Conceptos Avanzados Course No. CY420 Versión 4.0 Core Java

Copyright © 2004

Conceptos Avanzados

ResumenResumen

• 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