Ir al contenido

Cómo ejecutar consultas SQL desde Java (y prevenir inyecciones SQL)

·242 palabras·2 mins
Programación Bases de Datos
Alejandro Duarte
Autor
Alejandro Duarte
Alejandro Duarte es un Ingeniero de Software, escritor publicado y galardonado. Actualmente, trabaja para MariaDB plc como Ingeniero de Relaciones con Desarrolladores (Developer Relations Engineer). Comenzó su trayectoria en programación a los 13 años con BASIC en una rudimentaria pantalla negra, para lugo rápidamente transitar a C, C++ y Java durante sus años académicos en la Universidad Nacional de Colombia. Trasladándose primero al Reino Unido y luego a Finlandia, Alejandro profundizó su participación en la comunidad de código abierto. Es reconocido en los círculos de Java, acreditado con artículos y videos que acumulan millones de vistas, y presentaciones en eventos internacionales.

Para ejecutar consultas SQL en Java, necesitas un objeto Connection. Consulta el post anterior para aprender cómo obtener uno. Con este objeto, simplemente construye un nuevo PreparedStatement, establece los parámetros de la consulta (NUNCA USES CONCATENACIÓN DE CADENAS O LA APP SERÁ VULNERABLE A ATAQUES DE INYECCIÓN SQL, disculpa por gritar), y ejecuta la sentencia SQL. Dependiendo de si estás modificando datos o no, llamas a diferentes métodos para enviar la declaración a la base de datos.

Leer datos:

try (PreparedStatement statement = connection.prepareStatement("""
            SELECT column1, column2
            FROM table_name
        """)) {
    ResultSet resultSet = statement.**executeQuery**();
    while (resultSet.next()) {
        String val1 = resultSet.getString(1); // por índice de columna
        int val2 = resultSet.getInt("column2"); // por nombre de columna
        // ... usa val1 y val2 ...
    }
}

Insertar, actualizar, o eliminar datos:

try (PreparedStatement statement = connection.prepareStatement("""
            INSERT INTO table_name(column1, column2)
            VALUES (?, ?)
        """)) {
    statement.**setString**(1, someString);
    statement.**setInt**(2, someInteger);
    int rowsInserted = statement.**executeUpdate**();
}

Los métodos setString(int, String) y setInt(int, int) escapan caracteres especiales para que los agentes maliciosos no puedan usar una cadena maliciosa que contenga código SQL para realizar un ataque de inyección. Hay métodos similares para otros tipos de Java.

Consulta Tutorial JDBC Parte 2: Ejecutando Consultas SQL, para un tutorial más detallado o mira como implemento una aplicación Java de ejemplo desde cero usando JDBC y una base de datos MariaDB:

Si te gustó este post, considera seguirme en Twitter y suscribirte a Programming Brain en Youtube. ¡Diviértete programando!

Relacionados

Cómo abrir y cerrar conexiones JDBC
·154 palabras·1 min
Programación Bases de Datos
Para abrir y cerrar conexiones a bases de datos en Java, obtén un driver JDBC para tu base de datos.
Probando el rendimiento de MariaDB ColumnStore
·1338 palabras·7 mins
SQL Bases de Datos
ColumnStore de MariaDB es un motor que almacena datos de manera columnar.
Usando componentes web de Vaadin en documentos HTML sin frameworks
·543 palabras·3 mins
Programación Vaadin Interfaz de Usuario
Vaadin es una plataforma de desarrollo para crear aplicaciones web en Java.