Sobes.tech
Junior

¿Cuál es la diferencia entre PreparedStatement y Statement?

sobes.tech AI

Respuesta de la IA

Statement se utiliza para ejecutar consultas SQL estáticas. Se compila cada vez que se ejecuta. PreparedStatement se utiliza para ejecutar consultas SQL parametrizadas. La consulta se compila una sola vez al crear el objeto PreparedStatement y puede ejecutarse múltiples veces con diferentes valores de parámetros.

Diferencias principales:

Característica Statement PreparedStatement
Rendimiento Se compila en cada ejecución. Se compila una vez. Es más eficiente en reutilizaciones.
Seguridad Vulnerable a inyecciones SQL mediante concatenación de cadenas. Protege contra inyecciones SQL mediante el escape automático de parámetros.
Parámetros No soporta consultas parametrizadas. Soporta consultas parametrizadas (?).
Legibilidad Menos legible cuando se trabaja con muchos datos. Más legible al trabajar con parámetros.

Ejemplo de uso de Statement:

// Ejemplo con Statement ( vulnerable a inyecciones SQL)
String user = "admin";
String pass = "' OR '1'='1"; // Ejemplo de inyección SQL
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Ejemplo de uso de PreparedStatement:

// Ejemplo con PreparedStatement ( protegido contra inyecciones SQL)
String user = "admin";
String pass = "' OR '1'='1";
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, user);
pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();