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();
Pingback: Hibernate
hola
y cómo es posible agregar hibernate desde Eclipse??
para generar el mapeo de la BD?
saludos.
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.
¿Tengo que agregar algun programa para utilizar el jdbc?
Pingback: Eclipse y Tomcat
Pingback: MySQL
como puedo crear una coneccion en netbeans para poder conectar con la base de datos norwind
por fabor quisiera saber cuales son los tipos de dsn
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 🙂
Pingback: Trabajar como programador. Viviendo en medio de la presión y los plazos imposibles. - Programar en Java