Comunicación con la Base
de Datos.
JDBC.
JDBC, Java DataBase Connectivity, es interface
estándar para BD relacionales que permite el acceso a datos, es
decir posibilita la comunicación entre la capa servidora de aplicaciones
y la servidora de base de datos. Proveen un acceso uniforme a las distintas
bases de datos mediante el lenguaje SQL.
Nos abstrae de los detalles específicos
de las BD. Nosotros escribimos el código JDBC exactamente igual
independientemente de la base de datos que tengamos por debajo.
Por debajo de esta interfaz JDBC se
situarán drivers específicos que implementan las interfaces
JDBC. Estos drivers son los que conocen los detalles específicos
de la programación de un determinado sistema gestor de base de datos.
Nosotros escribimos nuestras sentencias JDBC y posteriormente, si queremos
acceder a una base de datos por ejemplo Oracle, seleccionaremos el driver
Oracle específico y ya está.
Los tipos de drivers JDBC disponibles
son los siguientes:
-
Tipo 1: Puente JDBC-ODBC. Pueden utilizar
la gran gama de drivers ODBC disponibles hoy en día. Las llamadas
JDBC son convertidas en llamadas ODBC convirtiendo los resultados. Su problema
es la lentitud de conversión JDBC-ODBC y la limitación de
ODBC a Windows.
-
Tipo 2: JDBC Parcialmente Nativo. Es un
driver 100% Java pero que se comunica con una librería nativa del
fabricante del SGBD en cuestión. Problemas con el mantenimiento
de la comunicación con el código nativo, con los problemas
que puede acarrear al usuario final.
-
Tipo 3: JDBC Net de Java puro. Usa el protocolo
de red nativa del servidor de base de datos. Nuestro driver se comunica
con la base de datos sin necesidad de ningún sistema intermedio,
y sus peticiones se convierten en peticiones de red del SGBD. La ventaja
es la independencia de la máquina al estar usando un driver 100%
puro Java. Pero necesitamos tener el protocolo de red del SGBD en cuestión.
-
Tipo 4: JDBC de protocolo de Java nativo
puro. Este sí que es un driver 100% puro Java y es la mejor opción
de conectividad en cuanto a su flexibilidad. Con esta opción es
más fácil la distribución de aplicaciones.
Ejemplo 1.
Veamos un primer ejemplo de cómo
usar esta interfaz JDBC. En este ejemplo haremos una consulta sencilla:
obtendremos la hora de base de datos "select sysdate from dual", visualizando
por pantalla el resultado obtenido, para verificar que podemos conectarnos
con la base de datos.
El ejemplo se encuentra en el directorio:
\Curso Java\Java\ejemplos\curso3\ConexionTHIN.java
Vamos a echar un vistazo a las interfaces
y clases JDBC que hemos utilizado del paquete java.sql.
Notar que estamos utilizando un driver
THIN de Oracle, que es un driver tipo 4, que por tanto no necesitará
tener nada de la base de datos instalado en la máquina, ni protocolo
de red ni nada, sólo el driver 100% Java que deberá ser apuntado
por nuestro classpath. En nuestro caso la clase que define al driver es
oracle.jdbc.driver.OracleDriver.class, que
nosotros tenemos en el directorio: /Curso Java/Java/ejemplos/
(a partir de este directorio está /oracle/jdbc/driver/OracleDriver.class,
ya que como sabemos la clase tiene que estar en una ruta de directorios
igual al nombre del paquete).
Ejemplo 2.
Este segundo ejemplo es exactamente el
mismo pero realizando la conexión en lugar de a través de
un driver THIN, de un driver OCI, que es un driver de tipo 3 y por lo tanto
requerirá que tengamos instalado el protocolo net de Oracle.
El ejemplo se encuentra en el directorio:
\Curso Java\Java\ejemplos\curso3\ConexionOCI.java
Ahora, la clase que define al driver
está en el archivo situado en el directorio /jdbc/lib/classes111.zip
(que está en nuestro directorio /Curso Java/ejemplos/), y tendremos
que moverla al directorio ROOT de Oracle para que el driver sea capaz de
encontrar el protocolo net de Oracle, y además apuntar al archivo
classes111.zip con nuestro classpath.
Este tipo de driver se utiliza cuando
queremos usar ciertos aspectos avanzados de conexión a la base de
datos, como por ejemplo la encriptación del protocolo de red de
Oracle A.N.O. que no es soportada por el driver THIN.
Ejemplo 3.
Veamos un primer ejemplo de cómo
usar esta interfaz JDBC. En este ejemplo haremos una consulta sencilla:
nombres de empleados de la tabla empleados "select ename from emp", visualizando
por pantalla el resultado obtenido. En lo sucesivo usaremos la conexión
THIN.
El ejemplo se encuentra en el directorio:
\Curso Java\Java\ejemplos\curso3\Empleados.java
Vamos a echar un vistazo a la nueva
funcionalidad JDBC usada en este ejemplo en el paquete java.sql.
Ejemplo 4.
En ocasiones lo que más penaliza
una operación de base de datos es el establecimiento de la conexión
más que la realización de la operación propiamente
dicha. Para evitar eso en este ejemplo utilizaremos lo que se llama un
broker de conexiones, es decir, un objeto que mantiene activas un número
determinado de conexiones con la base de datos y cuando le viene una solicitud
de conexión, le ofrece al solicitante una de estas conexiones que
ya tiene activa, balanceando así las peticiones que le llegan entre
las distintas conexiones que ya tiene activas. Para ello usaremos el objeto
com.javaexchange.dbConnectionBroker.DbConnectionBroker
(que también deberá ser apuntado por nuestro classpath.
Archivos necesarios:
\Curso Java\Java\ejemplos\curso3\EmpleadosBroker.java
\Curso Java\Java\ejemplos\com\javaexchange\dbConnectionBroker\DbConnectionBroker.class
Ejemplo 5.
Este ejemplo ilustra el uso de la clase
java.sql.PreparedStatement
que es útil para la ejecución de consultas con paso de parámetros.
El ejemplo se encuentra en el directorio:
\Curso Java\Java\ejemplos\curso3\EmpleadosPS.java
Otras clases de interés en el
paquete java.sql
son ResultSetMetaData, DatabaseMetaData y CallableStatement.
Ejercicio.
Realizar una clase que inserte el contenido
una fila en la tabla emp.