Uso de la API JDBC desde Java

11 de Noviembre del 2016


JDBC

¡Hola!, hoy os hablaré sobre cómo podemos tratar las bases de datos desde Java con Java Database Connectivity más conocida con JDBC siendo ésta una API que nos permite tratar las bases de datos independientemente del sistema operativo y desde dónde accede, para ello utiliza el lenguaje SQL (Structured Query Language).


mysql

Conexión a una base de datos MySQL

Cuando queremos trabajar con una base de datos conectada hemos de añadir un conector (con una búsqueda en San Google podremos descargarlo sin problemas), este conector lo encontraremos siendo un simple archivo con extensión jar por lo que será muy sencillo añadirlo, tan solo importar el jar como una libería.

Una vez teniendo esos conceptos claros trataré de enseñaros cómo podemos realizar las consultas a una base de datos ya creada (más adelante en otro post os escribiré cómo crearlas). Primero de todo hemos de ejecutar las consultas dentro de un try/catch para poder tratar las excepciones, en este caso supondremos que tenemos una base de datos para un colegio. Para poder conectarnos debemos escribir el siguiente código.

try {
  Class.forName("com.mysql.jdbc.Driver");
  Connection conexion = DriverManager
                  .getConnection("jdbc:mysql://localhost/colegio", "usuario", "contraseña");

} catch(SQLException sqlE) {
  sqlE.printStackTrace();
} catch(Exception e) {
  e.printStackTrace();
}

Crear tablas

Una vez conectados a la base de datos ya podemos realizar las consultas a través de la clase Statement y su método executeUpdate() (conviene revisar la sintaxis SQL si la tenemos olvidada), en este primer ejemplo de consulta vamos a crear una tabla, para ello primero de todo comprobaremos si existe para borrarla si fuera necesario con:

Statement st = conexion.createStatement();

st.executeUpdate("DROP TABLE IF EXISTS cursos;");

Y finalmente crearla:

st.executeUpdate("CREATE TABLE cursos ("
        + "id_curso INT(3) NOT NULL AUTO_INCREMENT,"
        + "denominacion VARCHAR(30),"
        + "duracion_anyos INT(1),"
        + "PRIMARY KEY(id_curso));");
        
// muy importante recordar cerrar la conexión cuando finalicemos las consultas
st.close();

Introducir datos

¡Ya tenemos nuestra tabla creada!, ahora sólo le faltan datos, podemos introducirlos directamente con la sentencia INSERT pero en este ejemplo vamos a ver cómo realizarlo preguntando los datos a un usuario, para ello declararemos una variable para limitar el número de cursos y luego con un bucle for haremos cada una de las inserciones (recordad que no necesitamos pedir la id_curso ya que se genera automáticamente como bien hemos indicado con AUTO_INCREMENT al crear la tabla).

int numCursos = 3;

for(int i = 0; i < numCursos; i++) {
  System.out.print("\nDime la denominación del curso número " + (i + 1) + ": ");
  String denominacion = Entrada.cadena();

  System.out.print("Ahora su duración: ");
  int duracion = Entrada.entero();

  st.executeUpdate("INSERT INTO cursos (denominacion, duracion_anyos)"
          + "VALUES (" + denominacion + "," + duracion + ");");

  System.out.println("\n\tCurso insertado");
}

Consulta de datos

Una vez tenemos la tabla con datos ya podemos consultarlos, para ello debemos utilizar otro método de la clase Statement llamado executeQuery(). Además debemos guardar su resultado en una instancia de la clase ResultSet para poder mostrar los datos con su método getObject(nombreColumna). ¿Qué lío no?, tranquilos, visto en código es todavía más sencillo que explicado.

// almacenamos todos los valores de la tabla cursos en la instancia de ResultSet
ResultSet rsCursos = st.executeQuery("SELECT * FROM cursos;");

// comprobamos que la consulta se haya realizado con éxito
if(rsCursos != null) {
  System.out.println("\nListado de los cursos.");

  // mostramos el resultado de la consulta comprobando si hay más con un while y
  // el método next()
  System.out.print("\n\tID Curso:\tDenominación:\tDuración(años):\n");
  while(rsCursos.next()) {
    System.out.println("\t" + rsCursos.getObject("id_curso") + "\t\t"
                        + rsCursos.getObject("denominacion")
    + "\t\t" + rsCursos.getObject("duracion_anyos"));
  }
}

// igual que con Statement hay que recordar cerrar las consultas
rsCursos.close();

Esto nos mostrará algo similar a:

ID Curso:  Denominación:  Duración:

curso 1   nombre 1     2

curso 2   nombre 2     3

curso 3   nombre 3     5

Si quisiéramos almacenar los datos de un COUNT(*) para luego mostrarlo debemos utilizar los métodos first() y getInt() de la clase ResultSet, el primero nos devuelve la primera fila y con el segundo almacenamos el valor de la primera celda de ésta en un int, por ejemplo.

ResultSet rsNumCursos = st.executeQuery("SELECT COUNT(*) FROM cursos");
rsNumCursos.first();
int cant = rsNumCursos.getInt(1);
rsNumCursos.close();

System.out.println("\nCantidad de cursos: " + cant);

Actualizar los datos

Ya hemos creado tablas, las hemos rellenado y mostrado, así que sólo nos queda ver cómo podemos actualizarla, para ello volveremos a utilizar el método executeUpdate() con la instancia de la clase Statement.

Si quisiéramos cambiar la duración de todos los cursos a dos años, ¡OJO!, esto es un ejemplo por lo que he obviado el WHERE en la sentencia ya que quería actualizar todos los cursos pero ¡¡¡muy importante!!! No te olvides de poner el Where en el Delete From.

st.executeUpdate("UPDATE cursos SET duracion_anyos = 2;");

Finalizado este repaso a las consultas con JDBC y para no faltar a la costumbre os dejo mi correo iam@jmoral.es y mi Twitter @owniz para cualquier duda o corrección.

Un saludo. ツ

Comparte en →