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