• No results found

Structure of this Document

Para conectarse a la base de datos, utilice el controlador JDBC de IBM Developer Kit para Java; a este controlador JDBC se le suele llamar nativo y se entrega junto con iSeries. Es un controlador JDBC de tipo 2 que se debe ejecutar directamente en iSeries.

El sistema iSeries incluye otro controlador JDBC, que es el controlador JDBC de IBM Toolbox para Java. En la mayoría de los casos, el controlador JDBC nativo supera al controlador de IBM Toolbox, de tipo 4, que se conecta a iSeries por medio del servidor de sistema principal. Le recomendamos que no codifique de manera fija el controlador JDBC específico que debe utilizarse en la llamada registerDriver o en la llamada getConnection. Si toma esta medida de precaución, le resultará fácil pasar de uno a otro controlador en el futuro.

La interfaz Driver y la clase DriverManager

Los controladores JDBC deben implementar la interfaz Driver (controlador). La implementación ha de contener un inicializador estático al que se llamará en el momento de cargar el controlador. El inicializador registra una nueva instancia de sí mismo en la clase DriverManager (gestor de controladores), que es el mecanismo que conecta una aplicación JDBC con la base de datos. El código que sigue hace una demostración de cómo se registra el inicializador en la clase DriverManager:

public class DB2Driver implements java.sql.Driver { static {

java.sql.DriverManager.registerDriver(new DB2Driver()); }}

El inicializador estático registrará automáticamente una instancia del controlador cuando una aplicación carga la implementación de Driver, como se muestra aquí. Esta línea de código es todo lo que necesita una aplicación de usuario para registrar el controlador JDBC nativo con objeto de que se utilice dentro de una aplicación:

Class.forName("com.ibm.jdbc.app.DB2Driver");

La clase DriverManager invoca los métodos de Driver cuando quiere interaccionar con el controlador registrado. La interfaz Driver incluye asimismo el método acceptURL(). La clase DriverManager puede emplear este método para determinar cuál de los controladores registrados en ella debe utilizar para un URL dado.

La clase DriverManager, cuando intenta establecer una conexión, llama al método connect del controlador y pasa el URL al controlador. La implementación de Driver, si logra reconocer el URL, devolverá un objeto Connection; en caso contrario, devuelve null. El controlador JDBC nativo utiliza el protocolo JDBC nativo para el URL. Esto es una constante para todos los controladores JDBC. El subprotocolo del controlador JDBC nativo es db2. Por lo tanto, los URL de JDBC nativo tendrán esta forma:

"jdbc:db2:\\<nombre del sistema>"

La clase DriverManager incluye los siguientes métodos importantes:

v registerDriver - Este método añade un controlador al conjunto de controladores disponibles. Se le

invoca en el momento de cargar el controlador. En general, al método registerDriver lo llama el inicializador estático proporcionado por cada controlador.

v getConnection - Este es el método al que invoca el cliente JDBC para establecer una conexión. La

invocación incluye un URL de JDBC, que la clase DriverManager pasa a cada controlador de su lista hasta que encuentra un controlador cuyo método Driver.connect reconoce el URL. Ese controlador

devuelve un objeto Connection a la clase DriverManager, que a su vez se lo pasa a la aplicación. El ejemplo que sigue muestra lo que hace un cliente JDBC para obtener una conexión de la clase DriverManager:

// Se carga el controlador. Esto crea una instancia del controlador

// y llama al método registerDriver para poner la interfaz com.ibm.db2.jdbc.app.DB2Driver // a disposición de los clientes.

Class.forName("com.ibm.db2.jdbc.app.DB2Driver");

// Se configuran argumentos para la llamada al método getConnection. // El subprotocolo "db2" que hay en el URL del controlador indica el // uso del controlador JDBC nativo.

String url = "jdbc:db2:MYSYSTEM"; String user = "SomeUser";

String passwd = "SomePwd";

// Se obtiene una conexión del primer controlador de la lista de DriverManager // que reconoce el URL "jdbc:db2:MYSYSTEM".

Connection con = DriverManager.getConnection(url, user, passwd);

Cuando utilice el controlador de IBM Developer Kit para Java, emplee esta sintaxis para el URL:

"jdbc:db2:nombreSistema"

siendo <nombreSistema> el nombre de una entrada del directorio de bases de datos relacionales del sistema iSeries.

El directorio de bases de datos relacionales se puede ver con el mandato CL Trabajar con entrada de directorio de bases de datos relacionales (WRKRDBDIRE). Si añade una entrada en la lista, hará que el nombre añadido esté disponible para el controlador JDBC nativo. El controlador puede acceder a otros servidores si usted tiene especificadas aquí entradas válidas de los servidores (utilizando el soporte DRDA).

Para añadir un sistema a un directorio de bases de datos relacionales (RDB), entre el mandato Trabajar con entrada de directorio de bases de datos relacionales (WRKRDBDIRE). La opción 1 le permite añadir un nuevo sistema. Para añadir una entrada correspondiente al sistema local, especifique un nombre y luego indique*LOCALpara la ubicación. Normalmente, el nombre que se elige para las entradas es el del sistema en el que reside la base de datos.

En Ejemplos: conectarse a una base de datos de iSeries 400 con el controlador JDBC de IBM Developer Kit para Java hallará un ejemplo de cómo conectarse a una base de datos de iSeries 400.

Propiedades de conexión: En esta tabla figuran las propiedades válidas de conexión para el controlador JDBC, los valores que tienen y sus descripciones:

Propiedad Valores Significado

″access″ ″all″,″read call″,″read only″ Este valor permite restringir el tipo de operaciones que se pueden realizar con una determinada conexión. El valor por omisión es″all″, que básicamente significa que la conexión tiene pleno acceso a la API de JDBC. El valor″read call″solo permite que la conexión haga consultas y llame a procedimientos almacenados. Se impedirá todo intento de actualizar la base de datos con una sentencia SQL. El valor″read only″permite restringir una conexión para que solo pueda hacer consultas. Se impedirán las llamadas a procedimientos almacenados y las sentencias de actualizar.

″block size″ ″0″,″8″,″16″,″32″,″64″,″128″,

″256″,″512″

Este es el número de filas que se extraerá de una sola vez para un conjunto de resultados. Cuando en un conjunto de resultados se haga un proceso típico solo de reenvío, se obtendrá un bloque de este tamaño. Así no se tendrá que acceder a la base de datos a medida que la aplicación del usuario vaya

procesando cada una de las filas. La base de datos solo solicitará otro bloque de datos cuando se haya llegado al final del primer bloque. Este valor solo se utiliza si la propiedad″blocking enabled″se establece en true.

El valor″0″para la propiedad″block size″equivale al valor″false″para la propiedad″blocking enabled″. El valor por omisión es utilizar la agrupación en bloques de tamaño

″32″. Esta decisión es completamente arbitraria, por lo que el valor por omisión podría cambiar en el futuro. Actualmente, la agrupación en bloques no se utiliza en los conjuntos de resultados desplazables.

″blocking enabled″ ″true″,″false″ Este valor sirve para determinar si la conexión debe utilizar o no la agrupación en bloques en la

recuperación de filas de conjuntos de resultados. La agrupación en bloques puede aumentar notablemente el rendimiento al procesar conjuntos de resultados.

Por omisión, esta propiedad está establecida en true.

Propiedad Valores Significado

″do escape processing″ ″true″,″false″ Esta propiedad establece un distintivo que indica si las sentencias bajo la conexión deben hacer o no un proceso de escape. La utilización del proceso de escape es una manera de codificar las sentencias SQL para que sean genéricas y similares para todas las plataformas, pero luego la base de datos lee las cláusulas de escape y sustituye la debida versión

específica del sistema para el usuario.

Es una propiedad muy valiosa, salvo que implica hacer un trabajo adicional en el sistema. Si el usuario sabe que solo va a utilizar sentencias SQL que ya contienen sintaxis SQL válida para el AS/400, es preferible establecer este valor en″false″para aumentar el rendimiento.

El valor por omisión de esta propiedad es″true″, ya que debe estar en conformidad con la especificación JDBC (el proceso de escape está activo por omisión; hallará más detalles en el método setEscapeProcessing de la interfaz Statement).

Se ha añadido este valor debido a una deficiencia de la especificación JDBC. Solo se puede establecer que el proceso de escape está

desactivado en la clase Statement. Ello funciona correctamente si se trata de sentencias simples. Basta con crear la sentencia, desactivar el proceso de escape y empezar a ejecutar las sentencias. Sin embargo, en el caso de las sentencias

preparadas y de las sentencias invocables, este esquema no funciona. Se suministra la sentencia SQL en el momento de construir la sentencia preparada o la sentencia invocable y esta no cambia después de ello. Así que la sentencia queda preparada en primer lugar y por el hecho de cambiar el proceso de escape más adelante no se consigue nada. Gracias a esta propiedad de conexión, existe un modo de soslayar la actividad general adicional.

Propiedad Valores Significado

″libraries″ cualquier valor Esta propiedad es un poco engañosa. Su nombre indica″bibliotecas″en plural, pero el controlador JDBC nativo solo permite que se especifique una biblioteca. Esa biblioteca, de proporcionarse, se establecerá como biblioteca por omisión. La biblioteca por omisión se empleará como biblioteca deseada para todas las referencias que no estén calificadas en las sentencias SQL.

La propiedad″naming″afecta al comportamiento de la presente propiedad si esta no se ha

establecido de manera explícita. En el caso por omisión, en el que la propiedad″naming″está establecida en″sql″, JDBC funciona como ODBC. El nombre de la biblioteca por omisión coincide con el nombre del perfil de usuario. En el caso de que la propiedad″naming″esté

establecida en″system″, la biblioteca por omisión será la que figura en la parte superior de la lista de bibliotecas de usuario. Existen restricciones en este comportamiento. Vea el tema que explica cómo se utiliza una lista de bibliotecas, y que hallará en otra parte de este sitio.

″naming″ ″sql″,″system″ Esta propiedad permite utilizar la sintaxis de denominación tradicional de AS/400 o la sintaxis de

denominación estándar de SQL. El valor″system″de la propiedad de denominación indica que se debe usar el carácter″/″para separar los valores de colección y de tabla, y el valor″sql″de la denominación indica que se debe usar el carácter″.″para separar los valores.

El establecimiento de este valor tiene ramificaciones que afectan también a cuál es la biblioteca por omisión. Hallará más información sobre esto si consulta la propiedad″libraries″. El valor por omisión es utilizar la denominación″sql″.

Propiedad Valores Significado

″password″ cualquier valor Esta propiedad prevé la

especificación de una contraseña para la conexión. Esta propiedad no funcionará correctamente si no se especifica también la propiedad

″user″. Estas propiedades están pensadas para que se pueda establecer conexión con la base de datos en los casos en que el usuario no coincida con el que está

ejecutando el trabajo de AS/400. El hecho de especificar las propiedades″user″y″password″ equivale a utilizar el método connection con la firma getConnection(String url, String userId, String password).

″trace″ ″true″,″false″ Esta propiedad prevé la activación del rastreo de la conexión. Se puede utilizar como una simple ayuda para la depuración. Está previsto ampliar esta característica en el futuro. Vea D2. El controlador JDBC ha lanzado una excepción. ¿Qué debo hacer? si desea más información sobre la depuración.

El valor por omisión es″false″, que corresponde a no utilizar el rastreo.

″transaction isolation″ ″none″,″read committed″,″read uncommitted″,″repeatable read″,

Esta propiedad permite al usuario establecer el nivel de aislamiento de transacción para la conexión. No hay ninguna diferencia entre establecer esta propiedad en un nivel concreto y especificar ese nivel en el método setTransactionIsolation() de la interfaz Connection.

El valor por omisión de esta propiedad es″none″, ya que JDBC toma por omisión la modalidad de compromiso automático.

″translate binary″ ″true″,″false″ Esta propiedad permite forzar al controlador JDBC a que trate los valores de datos de tipo binary y varbinary como si fuesen valores de datos de tipo char y varchar. El valor por omisión de esta propiedad es″false″, es decir, no tratar los datos de tipo binario como si fuesen datos de tipo carácter.

Propiedad Valores Significado

″user″ cualquier valor Esta propiedad prevé la

especificación de un ID de usuario para la conexión. Esta propiedad no funcionará correctamente si no se especifica también la propiedad

″password″. Estas propiedades están pensadas para que se pueda establecer conexión con la base de datos en los casos en que el usuario no coincida con el que está

ejecutando el trabajo de AS/400. Especificar las propiedades″user″y

″password″equivale a utilizar el método connection con la firma getConnection(String url, String userId, String password).

Registrar el controlador JDBC de IBM Developer Kit para Java antes de utilizar