1. Carrera:
Ingeniería de sistemas y telemática
Curso:
Desarrollo de software i.
Tema:
Java
Docente:
Marco Aurelio Porro Chulli
Integrantes:
Erlin Darwin herrera cieza.
Yosmer Aguilar cabrera.
2. CONNECTION
representa una conexión con una base de datos. Una sesión de conexión incluye
las sentencias SQL que se ejecutan y los resultados que son devueltos después
de la conexión.
Apertura de una conexión
La forma estándar de establecer una conexión a la base de datos es mediante la
llamada al método DriverManager.getConnection. Este método toma una
cadena que contiene una URL. La clase DriverManager, referida como la capa de
gestión JDBC, intenta localizar un driver que pueda conectar con la base de datos
representada por la URL.El siguiente código muestra como ejemplo una conexión
a la base de datos
Localizada en la URL “jdbc:odbc:wombat” con un user ID de “oboy” y password
“12java”.
String url = "jdbc:odbc:wombat";
Connection con = DriverManager.getConnection(url, "oboy", "12Java");
3. JDBC y URL’s
Una URL JDBC suministra una forma de identificar una base de datos para que el
driver apropiado pueda reconocerla y establecer la conexión con ella.
Dado que los JDBC URL se usan con varios tipos de drivers, las convenciones son
necesariamente muy flexibles.
Primero, permiten a diferentes drivers usar diferentes esquemas para nombrar las
bases de datos. EL subprotocolo odbc, por ejemplo, permite que las URL contengan
valores de atributos (pero no los requieren).
Segundo, las URL’s JDBC permiten a los desarrolladores de drivers codificar toda la
información de la conexión dentro de ella. por ejemplo, para un applet que quiera
hablar con una base de datos dada el abrir la conexión sin necesitar que el usuario
realice ninguna tarea de administración de sistemas.
Tercero, las URL’s JDBC permiten un nivel de indirección. Esto quiere decir que la
URL JDBC puede referirse a una base de datos lógica o un host lógico que se
traduce dinámicamente al nombre actual por el sistema de nombramiento de la
red.
4. La sintaxis para las URL’s JDBC que se muestra a continuación tiene tres
partes separadas por dos puntos:
jdbc:<subprotocol>:<subname>
1 jdbc – el protocolo. El protocolo en una URL JDBC es siempre jdbc
2 - <subprotocol> - el nombre del driver o el nombre del mecanismo de
conectividad con la base de datos, que puede estar soportado por uno o más
drivers. Un ejemplo sobresaliente de un subprotocolo es “odbc”, que ha sido
reservado para URL’s que especifican nombres de fuentes de datos estilo
ODBC.
jdbc:odbc:fred
En este ejemplo, el subprotocolo es “odbc” y el subnombre “fred” es el
nombre de la fuente de datos ODBC local.
5. 3 <subname> - una forma de identificar la base de datos. El subnombre
puedevariar dependiendo del subprotocolo, y puede tener un subnombre con
cualquier sintaxis interna que el fabricante del driver haya escogido.
El subprotocolo “odbc”
El subprotocolo “odbc” es un caso especial. Ha sido reservado para URL’s
queespecifican el estilo ODBC de nombres de fuentes de datos y que tiene
lacaracterística de permitir especificar cualquier número de valores de
atributosdespués del subnombre (el nombre de la fuente de datos) La sintaxis
completa para el protocolo “odbc” es:
jdbc:odbc:<data-source-name>[;<attribute-name>=<attribute-value>]*
Todos los siguientes son nombres válidos jdbc:odbc
jdbc:odbc:qeor7
jdbc:odbc:wombat
jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER
jdbc:odbc:qeora;UID=kgh;PWD=fooey
6. Registro de subprotocolos
Un desarrollador de drivers puede reservar un nombre para usar como
elsubprotocolo en una URL JDBC. Cuando la clase DriverManager presenta
este nombre a su lista de drivers registrados, el driver para el que este
nombre está reservado debería reconocerlo y establecer una conexión a la
base de datos que lo identifica.
lo identifica. Por ejemplo odbc está reservado para el puente JDBC-ODBC. Si
fuera, por poner otro ejemplo, Miracle Corporation, y quisiera registrar
“miracle” como el subprotocolo para el driver JDBC que conecte a su DBMS
Miracle no tiene que usar sino ese nombre.
7. Envío de Sentencias SQL
Una vez que la conexión se haya establecido, se usa para pasar sentencias
SQL a la base de datos subyacente. JDBC no pone ninguna restricción sobre
los tipos de sentencias que pueden enviarse.
JDBC suministra tres clases para el envío de sentencias SQL y tres métodos en
la interfaz Connection para crear instancias de estas tres clases. Estas clases y
métodos son los siguientes:
1. El método createStatement se usa para:
Sentencias SQL simples (sin parámetros).
2.El método prepareStatement se usa para:
Sentencias SQL con uno ó más parámetros IN. Sentencias SQL simples que
se ejecutan frecuentemente.
• El método prepareCall se usa para:
Llamar a procedimientos almacenados.
8. Transacciones
• Una transacción consiste en una o más sentencias que han sido
ejecutadas,completas y, o bien se ha hecho commit o bien roll-back.
Cuando se llama al método commit o rollback , la transacción actúal finaliza
y comienza otra.
El método commit hace permanente cualquier cambio que una sentencia
SQL realiza en la base de datos, y libera cualquier bloqueo mantenido por la
transacción.El método rollback descarta estos cambios.
Muchos drivers JDBC soportan transacciones. De hecho, un driver JDBC-
compliant debe soportar transacciones. DatabaseMetaData suministra
información que describe el nivel de transacción soportado por el DBMS.
9. Niveles de aislamiento de transacciones
. El usuario puede especificar un nivel de aislamiento para indicar que nivel de precaución
debería ejercitar el DBMS para la resolución de estos conflictos. Por ejemplo, ¿que
ocurrirá cuando una transacción cambia un valor y una segunda transacción lee el valor
antes de que el cambio haya sido ‘commitado’ o descartado?. ¿Debería permitirse, dado
que el valor cambiado leído por la segunda transacción será invalido si la primera
transacción ha hecho rollback?. Un usuario JDBC puede instruir a la DBMS para que un
valor que ha sido leído antes del ‘commit’ (“dirty reads”) con el siguiente código donde
con es el objeto de la actual conexión:
con.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED);
El nivel de aislamiento más alto, el que más cuidado toma para evitar conflictos. La
interfase Connection define cinco niveles de aislamiento con el nivel más bajo que
especifica que no soporte transacciones hasta el más alto que especifica que mientras
una transacción esté abierta ninguna otra transacción puede realizar cambios en los
datos leídos por esa transacción. Normalmente, el nivel de transacción más alto es el más
lento en la ejecución de la aplicación.(debido a que se incrementan los bloqueos y se
disminuye la concurrencia de los usuarios).
10. Ejemplo: cargar el controlador JDBC nativo
// Cargar el controlador JDBC nativo en DriverManager para hacerlo
// disponible para peticiones getConnection.
Class.forName("com.ibm.db2.jdbc.app.DB2Driver");
Los controladores JDBC están diseñados para informar a DriverManager
acerca de sí mismos automáticamente cuando se carga su clase de
implementación de controlador. Una vez que se ha procesado la línea de
código mencionada anteriormente, el controlador JDBC nativo está
disponible para la DriverManager con la que debe trabajar. La línea de
código siguiente solicita un objeto Connection que utiliza el URL de JDBC
nativo:
11. Ejemplo: solicitar un objeto Connection
// Obtener una conexión que utiliza el controlador JDBC nativo.
Connection c = DriverManager.getConnection("jdbc:db2:*local");
También puede suministrarse un nombre de sistema específico, de la forma
siguiente:
Connection c = DriverManager.getConnection("jdbc:db2:rchasmop");
Así se crea una conexión con el sistema rchasmop. Si el sistema al que intenta
conectarse es un sistema remoto (por ejemplo, a través de Distributed
Relational Database architecture), debe utilizarse el nombre de sistema del
directorio de bases de datos relacionales.
12. Propiedades
El método DriverManager.getConnection toma un URL de una sola serie
indicado anteriormente, y solo es uno de los métodos de DriverManager
destinado a obtener un objeto Connection. También existe otra versión del
método DriverManager.getConnection que toma un ID de usuario y una
contraseña.
Ejemplo: método DriverManager.getConnection que toma un ID de
usuario y una contraseña
// Obtener una conexión que utiliza el controlador JDBC nativo.
Connection c = DriverManager.getConnection("jdbc:db2:*local", "cujo",
"newtiger");
La línea de código intenta conectarse con la base de datos local como
usuario cujo con la contraseña newtiger sin importar quién ejecuta la
aplicación.
13. También existe una versión del método DriverManager.getConnection que
toma un objeto java.util.Properties que permite una mayor personalización.
Ejemplo: método DriverManager.getConnection que toma un objeto
java.util.Properties
// Obtener una conexión que utiliza el controlador JDBC nativo.
Properties prop = new java.util.Properties();
prop.put("user", "cujo");
prop.put("password","newtiger");
Connection c = DriverManager.getConnection("jdbc:db2:*local", prop);
El código es funcionalmente equivalente a la versión mencionada
anteriormente que ha pasado el ID de usuario y la contraseña como
parámetros.
14. Propiedades JDBC de IBM Toolbox para Java
Propiedades generales:Las propiedades generales son atributos del sistema
que especifican el usuario, la contraseña y si se necesita una solicitud para
conectarse al servidor.
"password“:Especifica la contraseña para conectarse al servidor.
"prompt“:Especifica si debe presentarse al usuario una solicitud en el caso de
que sea necesario un nombre de usuario o una contraseña para conectarse al
servidor.
"user“:Especifica el nombre de usuario para conectarse al servidor
15. Propiedades de servidor
Las propiedades de servidor especifican atributos que rigen las
transacciones, las bibliotecas y las bases de datos.
"auto commit“:Especifica si la modalidad de compromiso automático es la
modalidad de conexión predeterminada para las nuevas conexiones.
"concurrent access resolution“:Especifica si se utiliza el acceso "currently
committed" en la conexión.
"cursor hold“: Especifica si se debe retener el cursor entre transacciones.
"cursor sensitivity“:Especifica la sensibilidad de cursor que se solicita desde
la base de datos.
"database name“:Especifica la base de datos que debe utilizarse para la
conexión con una agrupación de almacenamiento auxiliar (ASP)
independiente.
"decfloat rounding mode“:Especifica la modalidad de redondeo que debe
utilizarse al trabajar con el tipo de datos decfloat.
16. Propiedades de formato
"date format“:Especifica el formato de fecha utilizado en los literales de
fecha dentro de las sentencias SQL.
"date separator“:Especifica el separador de fecha utilizado en los literales de
fecha dentro de las sentencias SQL.
"decimal separator“:Especifica el separador decimal utilizado en los literales
numéricos dentro de las sentencias SQL.
"naming“:Especifica el convenio de denominación utilizado al hacer
referencia a las tablas.
" time format“:Especifica el formato de hora utilizado en los literales de hora
dentro de las sentencias SQL.
"time separator“:Especifica el separador de hora utilizado en los literales de
hora dentro de las sentencias SQL.
17. Ejemplos: utilización del controlador JDBC para conectarse a un servidor
Ejemplo: utilizar un URL en el que no se especifica un nombre de sistema
Este ejemplo hace que se solicite al usuario que escriba el nombre del
sistema al que desea conectarse.
// Conéctese al sistema sin nombre.
// Se solicita al usuario que escriba el nombre del sistema.
Connection c = DriverManager.getConnection("jdbc:as400:");
Ejemplo: conectarse a la base de datos del servidor; no se especifica ningún
esquema SQL predeterminado ni ninguna propiedad
// Conéctese al sistema 'mySystem'. No
// se especifica ningún esquema SQL predeterminado ni ninguna
propiedad.
Connection c = DriverManager.getConnection("jdbc:as400://mySystem");
18. Propiedades de rendimiento
"big decimal“:Especifica si se utiliza un objeto java.math.BigDecimal
intermedio para conversiones de decimal empaquetado y con zona.
"block criteria“:Especifica los criterios para recuperar datos del servidor en
bloques de registros.
"block size“:Especifica el tamaño de bloque (en kilobytes) que debe
recuperarse del servidor y colocarse en la memoria caché del cliente.
"lazy close“:Especifica si hay que diferir el cierre de los cursores hasta las
peticiones ulteriores.
"lob threshold“:Especifica el tamaño máximo de LOB (objeto de gran
tamaño) en bytes que puede recuperarse como parte de un conjunto de
resultados.
"package“:Especifica el nombre base del paquete SQL.
Estas son algunas propiedades
19. Propiedades de ordenación
"sort“:Especifica cómo ordena el servidor los registros antes de enviarlos al cliente.
"sort language“:Especifica un ID de idioma de tres caracteres que debe utilizarse
para la selección de una secuencia de ordenación.
"sort table“:Especifica la biblioteca y el nombre de archivo de una tabla de
secuencia de ordenación almacenada en el servidor.
"sort weight“:Especifica cómo trata el servidor las mayúsculas/minúsculas al
ordenar registros.
Estas solo son algunas propiedades
20. Ejemplo: conectarse a la base de datos del servidor; se especifica un
esquema SQL predeterminado
// Conéctese al sistema 'mySys2'. Se
// Especifica el esquema SQL predeterminado 'myschema'.
Connection c2 =
DriverManager.getConnection("jdbc:as400://mySys2/mySchema");
Ejemplo: conectarse a la base de datos del servidor y utilizar un URL
(localizador uniforme de recursos) para especificar las propiedades
// Conéctese utilizando las propiedades. Se
// propiedades se establecen en el URL,
// en lugar de mediante un objeto propiedades.
Connection c = DriverManager.getConnection(
"jdbc:as400://mySystem;naming=sql;errors=full");