Consultas SQL en Java con JDBC

Resumen

Conectar Java con MySQL para leer e insertar datos requiere tres piezas clave: una conexión activa, un objeto que ejecute la consulta y un contenedor para procesar resultados. Aquí aprendes a usar Statement y PreparedStatement con JDBC para hacer un select básico y una inserción segura en una tabla de empleados.

Cómo se estructura una consulta SQL desde Java con JDBC

Antes de escribir una sola línea de SQL, necesitas tres variables declaradas en null: una de tipo Connection, otra de tipo Statement y otra de tipo ResultSet. Esa es la base sobre la que se monta todo lo demás [00:10].

El flujo siempre sigue el mismo orden:

  1. Declarar las tres variables en null.
  2. Establecer la conexión dentro de un bloque try pasando URL, usuario y password.
  3. Crear el objeto Statement con createStatement().
  4. Ejecutar la consulta y procesar los resultados.

¿Para qué sirve el ResultSet en JDBC? Es el objeto que guarda los datos devueltos por una consulta select. Lo recorres con un while y el método next() para ir fila por fila.

Cómo hago un select simple con Statement y executeQuery

Cuando solo necesitas leer datos, Statement es suficiente. Lo creas con myStatement = miConexion.createStatement() y luego ejecutas la consulta con executeQuery(), que está pensado específicamente para sentencias select [01:05].

El resultado lo guardas en tu ResultSet y lo recorres así:

java ResultSet myRes = myStatement.executeQuery("SELECT * FROM employees"); while (myRes.next()) { System.out.println(myRes.getString("firstName")); }

El método getString("firstName") recupera el valor de la columna por su nombre. Al correr el programa, la consola devuelve los nombres almacenados: John, Jane, Michael, Emily y David [01:55].

Por qué usar getString y otros métodos get

JDBC ofrece métodos get específicos según el tipo de dato: getString para texto, getInt para enteros, getDate para fechas. Usar el método correcto evita errores de casting y mantiene tu código legible.

Por qué conviene usar PreparedStatement para insertar datos

Cuando vas más allá de un select y necesitas insertar, actualizar o eliminar registros, PreparedStatement es la opción recomendada. Permite parametrizar la consulta, lo que protege contra inyección SQL y hace el código más limpio [02:30].

El cambio empieza por la declaración:

java PreparedStatement myStatement = null; String sql = "INSERT INTO employees (firstName, surname) VALUES (?, ?)"; myStatement = miConexion.prepareStatement(sql); myStatement.setString(1, "Joana"); myStatement.setString(2, "Dorantes");

Los signos ? son marcadores de posición. Con setString(1, ...) y setString(2, ...) asignas los valores en el orden correcto.

¿Cuál es la diferencia entre executeQuery y executeUpdate? executeQuery se usa para select y devuelve un ResultSet. executeUpdate se usa para insert, update y delete, y devuelve un entero con el número de filas afectadas.

Cómo ejecutar la inserción y validar el resultado

Para correr la sentencia y saber si se aplicó, guardas el retorno de executeUpdate en una variable entera:

java int rowsAffected = myStatement.executeUpdate(); if (rowsAffected > 0) { System.out.println("Se ha creado un nuevo empleado"); }

Fíjate que aquí ya no usas el ResultSet ni un while. Como solo te interesa confirmar que la inserción ocurrió, basta con un if [03:50].

Cómo verifico que la inserción funcionó en MySQL Workbench

Una vez ejecutado el programa, la consola muestra: "Genial, nos conectamos" y "Se ha creado un nuevo empleado". Para confirmarlo desde el lado de la base de datos, abres MySQL Workbench, te conectas con tu usuario root y revisas la tabla employees [04:40].

Tienes dos formas rápidas de verificar:

  • Escribir un SELECT * FROM employees en una pestaña de consulta.
  • Ir al panel de la izquierda, expandir la tabla employees y elegir Select Rows.

Ambas opciones muestran el nuevo registro con firstName Joana y surname Dorantes. El resto de columnas quedan en null porque solo enviaste esos dos campos en el insert.

Qué pasa con las columnas no incluidas en el insert

Las columnas que no mencionas en la sentencia de inserción toman el valor null por defecto, siempre que la tabla lo permita. Si una columna está marcada como NOT NULL sin valor por defecto, la inserción fallará. Por eso conviene revisar la estructura de la tabla antes de armar tu insert.

Ya puedes leer e insertar datos desde Java a MySQL con dos enfoques distintos. ¿Qué consulta vas a probar primero en tu propio proyecto? Cuéntame en los comentarios.