JDBC

JDBC (Java Database Connectivity) es un API para trabajar con bases de datos desde Java, independientemente de la base de datos a la que accedemos.

A la hora de conectarnos a una base de datos usando JDBC usamos un driver intermedio, que no es más que una clase ofrecida por el vendedor que implementa la interfaz Driver. Cuando se crea una instancia de una de estas clases Driver, esta se registra con el DriverManager (gestor de drivers) que es la encargada de decidir qué driver se ha de utilizar para acceder a tal o cual BBDD. El driver para trabajar con bases de datos MySQL, por ejemplo, es com.mysql.jdbc.Driver.

A partir de la clase DriverManager, a través del método estático getConnection(String url, String usuario, String password), obtenemos el objeto Connection que representa la conexión a la base de datos a través del Driver que el DriverManager ha seleccionado. Si la base de datos permitiera acceso anónimo, se podría usar una versión de getConnection que sólo requiere un parámetro String con la URL.

Para hacer consultas a la base de datos utilizamos el método executeQuery(String consulta) del objeto Statement, que se obtiene a partir de Connection con createStatement(). Al ejecutar la consulta se obtiene un objeto ResultSet (conjunto resultado) con los campos de las tuplas que cumplen las condiciones de la consulta:

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/mibbdd", "pepe", "123");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM entradas");
while(rs.next())
  System.out.prinln("Titulo: " + rs.getString("titulo"));

Como vemos, nos movemos por cada uno de los resultados del ResultSet usando el método next, que devolverá false cuando no existan más resultados. Para acceder a los valores de los campos de la tupla actual se usan métodos de la forma getTipoDato(String nombreColumna).

Si lo que queremos hacer es modificar la base de datos (usar UPDATE, DELETE o INSERT) en lugar de usar el método executeQuery, llamaremos a executeUpdate(String consulta), que nos devuelve el número de tuplas de la base de datos que han sido afectadas por la operación.

Por último, cuando terminemos de trabajar con ellos deberemos cerrar el ResultSet, Statement y Connection (cerrar la conexión en sí debería propiciar que se cerrara también el Statement y ResultSet, pero es buena práctica llamar al método close manualmente para cada uno de ellos, porque esto no tiene por qué ser siempre así).

Ahora bien, la iteración con la base de datos es muy costosa, y es siempre interesante decrementar el tiempo y los recursos que vamos a necesitar. Por eso, una opción consiste en utilizar el objeto PreparedStatement en lugar de Statement si vamos a utilizar a menudo una misma consulta. Con PreparedStatement el motor de la BBDD compila las consultas (que se pasan al crear el objeto PreparedStatement, y no al llamar al método que ejecuta la consulta), que deberán tener el símbolo ? donde se vayan a insertar los valores; y se utilizan métodos de la forma setTipoValor(int posicion, Tipo valor) para indicar estos valores antes de hacer la consulta. Veamos un ejemplo:

PreparedStatement ps = con.prepareStatement("INSERT VALUES (?, ?) INTO usuarios");
ps.setString(1, "Pepe");
ps.setString(2, "García");
ps.executeUpdate();

ps.setString(1, "Ramón");
ps.setString(2, "Gómez");
ps.executeUpdate();

10 comentarios en «JDBC»

  1. Pingback: Hibernate

  2. Pingback: Eclipse y Tomcat

  3. Pingback: MySQL

  4. muy bien explicado me sirvio de mucho hace poco empezamos con conexion de base de datos y creo que esto me va a servir de mucho muchas gracias por la info 🙂

  5. Pingback: Trabajar como programador. Viviendo en medio de la presión y los plazos imposibles. - Programar en Java

Responder a lucia Cancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.