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();