9.3 Acceso a BBDD
1. Cargar el Driver¶
En un proyecto Java que realice conexiones a bases de datos es necesario, antes que nada, utilizar Class.forname(…).newInstance() para cargar dinámicamente el Driver que vamos a utilizar. Esto solo es necesario hacerlo una vez en nuestro programa. Puede lanzar excepciones por lo que es necesario utilizar un bloque try-catch.
Hay que tener en cuenta que las clases y métodos utilizados para conectarse a una base de datos (explicados más adelante) funcionan con todos los drivers disponibles para Java (JDBC es solo uno, hay muchos más). Esto es posible ya que el estándar de Java solo los define como interfaces (interface) y cada librería driver los implementa (define las clases y su código). Por ello es necesario utilizar Class.forName(…) para indicarle a Java qué driver vamos a utilizar.
Este nivel de asbtracción facilita el desarrollo de proyectos ya que si necesitáramos utilizar otro sistema de base de datos (que no fuera MySQL) solo necesitaríamos cambiar la línea de código que carga el driver y poco más. Si cada sistema de base de datos necesitara que utilizáramos distintas clases y métodos todo sería mucho más complicado.

Las cuatro clases fundamentales que toda aplicación Java necesita para conectarse a una base de datos y ejecutar sentencias son: DriverManager, Connection, Statement y ResultSet.

2. Clase DriverManager¶
Paso 1: Establecer conexión con la BBDD
Ejemplo de conexión según SGBD
Vamos a necesitar información adicional como son los datos de usuario y contraseña.
La clase java.sql.DriverManager es la capa gestora del driver JDBC. Se encarga de manejar el Driver apropiado y permite crear conexiones con una base de datos mediante el método estático getConnection() que tiene dos variantes:
Este método intentará establecer una conexión con la base de datos según la URL indicada. Opcionalmente se le puede pasar el usuario y contraseña como argumento (también se puede indicar en la propia URL). Si la conexión es satisfactoria devolverá un objeto Connection.
Ejemplo de conexión a la base de datos prueba en localhost
Este método puede lanzar dos tipos de excepciones (que habrá que manejar con un try-catch):
- SQLException: la conexión no ha podido producirse. Puede ser por multitud de motivos como una URL mal formada, un error en la red, host o puerto incorrecto, base de datos no existente, usuario y contraseña no válidos, etc.
- SQLTimeoutException: se ha superado el LoginTimeout sin recibir respuesta del servidor.
3. Clase Connection¶
Paso 2. Crear un objeto Statement
Un objeto java.sql.Connection representa una sesión de conexión con una base de datos. Una aplicación puede tener tantas conexiones como necesite, ya sea con una o varias bases de datos.
El método más relevante es createStatement() que devuelve un objeto Statement asociado a dicha conexión que permite ejecutar sentencias SQL.
El método createStatement() también puede lanzar excepciones de tipo SQLException.
Cuando ya no la necesitemos es aconsejable cerrar la conexión con close() para liberar recursos:
4. Clase Statement¶
Paso 3. Ejecutar sentencia SQL
Un objeto java.sql.Statement permite ejecutar sentencias SQL en la base de datos a través de la conexión con la que se creó el Statement (ver Paso 2). Los tres métodos más comunes de ejecución de sentencias SQL son executeQuery(…), executeUpdate(…) y execute(…).
Estos tres métodos pueden lanzar excepciones de tipo SQLException y SQLTimeoutException.
ResultSet executeQuery(String sql): ejecuta la sentencia sql indicada (de tipo SELECT). Devuelve un objeto ResultSet con los datos proporcionados por el servidor.
int executeUpdate(String sql): ejecuta la sentencia sql indicada (de tipo DML como por ejemplo INSERT, UPDATE o DELETE). Devuelve un número de registros que han sido insertados, modificados o eliminados.
Cuando ya no lo necesitemos es aconsejable cerrar el statement con close() para liberar recursos:
Nota
Podríamos decir que este resultset es una especie de tabla virtual que se almacena en memoria con la información en su interior.
5. Clase ResultSet¶
Paso 4. Leer el resultset
Un objeto java.sql.ResultSet contiene un conjunto de resultados (datos) obtenidos tras ejecutar una sentencia SQL, normalmente de tipo SELECT. Es una estructura de datos en forma de tabla con registros (filas) que podemos recorrer para acceder a la información de sus campos (columnas).
ResultSet utiliza internamente un cursor que apunta al registro actual sobre el que podemos operar. Inicialmente dicho cursor está situado antes de la primera fila y disponemos de varios métodos para desplazar el cursor. El más común es next():
boolean next(): mueve el cursor al siguiente registro. Devuelve true si fue posible y false en caso contrario (si ya llegamos al final de la tabla).
Algunos de los métodos para obtener los datos del registro actual son:
String getString(String columnLabel): devuelve un dato String de la columna indicada por su nombre.
Por ejemplo
String getString(int columnIndex): devuelve un dato String de la columna indicada por su nombre (la primera columna es la 1, no la cero).
Por ejemplo
Existen métodos análogos a los anteriores para obtener valores de tipo int, long, float, double, boolean, Date, Time, Array, etc. Pueden consultarse todos en la documentación oficial de Java.
int getInt(String columnLabel)int getInt(int columnIndex)double getDouble(String columnLabel)double getDouble(int columnIndex)boolean getBoolean(String columnLabel)boolean getBoolean(int columnIndex)Date getDate(String columnLabel)Date getDate(int columnIndex)- etc.
Más adelante veremos cómo se realiza la modificación e inserción de datos.
Todos estos métodos pueden lanzar una SQLException.
Ejemplo para recorrer un ResultSet llamado rs y mostrarlo por pantalla
Ejercicio previo: crear base de datos
Para la realización de los ejercicios deberás crear una base de datos en tu SGBD (MySql) de nombre pr_tuNombre.
Para ello deberás de crear un usuario de nombre pr_tuNombre con contraseña 1234 y con una base de datos con el mismo nombre:


Descarga el fichero sql tablas.sql e insértalas en tu base de datos.
Para ello, ve a la pestaña de phpMyAdmin
Importa, selecciona el fichero descargado anteriormente y ejecútalo.
Siguiendo el ejemplo anterior...
Después de esto, crea un ejercicio de nombre ListarProveedores.java en el que se liste todos los proveedores.