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();

Comentarios
  1. […] Usar JDBC es complejo y muy dependiente de la estructura de los datos. Sería más natural y mucho más sencillo trabajar directamente con objetos, pero es imposible con las BBDD relacionales, y las BBDD orientadas a objeto están todavía muy verdes. […]

    Responder

  2. hola
    y cómo es posible agregar hibernate desde Eclipse??
    para generar el mapeo de la BD?
    saludos.

    Responder

  3. y cómo es posible agregar hibernate desde Eclipse??
    para generar el mapeo de la BD?

    Esto iría mejor en la entrada sobre Hibernate, pero bueno.

    Lo que yo utilizo es MyEclipse, que viene con un plugin para hacerlo, pero es de pago.

    Responder

  4. lucia

    ¿Tengo que agregar algun programa para utilizar el jdbc?

    Responder

  5. […] nuestra aplicación usando JSP, Servlets, JDBC, Hibernate, o cualquier otra tecnología que nos […]

    Responder

  6. […] hora de trabajar con MySQL. Si programas en Java también te puede interesar nuestra entrada sobre JDBC; si programas en Python, nuestra entrada sobre DB-API. Para iniciar el cliente indicando el nombre […]

    Responder

  7. Maria

    como puedo crear una coneccion en netbeans para poder conectar con la base de datos norwind

    Responder

  8. Maria

    por fabor quisiera saber cuales son los tipos de dsn

    Responder

  9. emmanuel

    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 🙂

    Responder

  10. […] mi empeño en desarrollar una arquitectura java basada en Spring, utilizando su integración con JDBC (Java Database Connectivity) JdbcTemplate. Además realicé un proceso de reutilización de código que a hacer posible que mis […]

    Responder

Deja un comentario