Me di cuenta de que cuando uso un PreparedStatement
no parece escapar de ciertos caracteres comodín como '%' o '_'. Sé que se pueden escapar en MySql usando una barra invertida. Esto me hizo preguntarme, ¿a qué personajes escapará un PreparedStatement
?¿Qué caracteres escaparán PreparedStatement?
Respuesta
PreparedStatement
no escapa nada - se basa en el soporte de base de datos para declaraciones precompiladas.
Es decir, PreparedStatement
nunca sustituye ?
s por valores de parámetros para formar una cadena de consulta literal. En cambio, envía una cadena de consulta con marcadores de posición a la base de datos y utiliza el soporte de la base de datos para vincular los parámetros de consulta (sin embargo, puede depender de la implementación del controlador JDBC).
En mi prueba, se escapa entre comillas simples, \r
, \t
, \n
y así sucesivamente. Funciona muy bien:
String sql = "INSERT INTO test(title) VALUES(?)";
PreparedStatement stmt = con.prepareStatement(sql);
String title = "I'm a \"student\" in a \t (university) \r\n";
stmt.setString(1, title);
stmt.executeUpdate();
Eso puede ser específico para su controlador/db. Como ha mencionado axtavt, la mayoría no escapa automáticamente a la entrada. – Leigh
- 1. ¿Qué debo cerrar primero, PreparedStatement o Connection?
- 2. PreparedStatement setNull (..)
- 3. PreparedStatement con Statement.RETURN_GENERATED_KEYS
- 4. Java Crosstab - preparedstatement query
- 5. setObject() método de PreparedStatement
- 6. Java PreparedStatement UTF-8 problema de carácter
- 7. ¿Qué hace la precompilación de un JDBC PreparedStatement?
- 8. Almacenamiento en caché PreparedStatement: qué significa (cómo funciona)
- 9. PreparedStatement alternativa dentro de JPA?
- 10. consulta SQL ejecutar con PreparedStatement
- 11. que es más rápido? Declaración o PreparedStatement
- 12. Relación entre "cerrar" para PreparedStatement y Connection?
- 13. Insertar datos binarios en MySQL (sin PreparedStatement)
- 14. procedimientos almacenados como consultas: CallableStatement vs. PreparedStatement
- 15. PreparedStatement, CallableStatement y consideraciones de rendimiento
- 16. Pooling PreparedStatement en Tomcat con MySQL
- 17. Java PreparedStatement recuperando la última ID insertada
- 18. ¿Cuándo debería cerrarse un PreparedStatement java?
- 19. ¿Cómo obtener los parámetros de PreparedStatement?
- 20. Almacenamiento en memoria caché PreparedStatement en Tomcat
- 21. PreparedStatement y setTimestamp en JDBC de Oracle
- 22. ¿Qué caracteres Unicode representan "tiempo"?
- 23. PreparedStatement no está leyendo todos mis parámetros para PostGIS Geography
- 24. Insertar datos de blob en Java utilizando PreparedStatement
- 25. Java: inserte varias filas en MySQL con PreparedStatement
- 26. Uso de la agrupación de PreparedStatement en dbcp
- 27. Mysql Drop Table como PreparedStatement no funciona para mí
- 28. ¿Cómo puedo vincular una ArrayList a un PreparedStatement en Oracle?
- 29. ¿Qué caracteres quedan para los pp-tokens?
- 30. ¿Qué significan estos caracteres especiales en Java?
Interesante, ¿cómo se ve ese soporte para MySql? – stevebot
MySql admite declaraciones preparadas de la misma manera en el lado del servidor. La forma en que se ve en su código depende del controlador que está utilizando. –
Creo que muchos controladores realmente insertan texto de argumento escapado en el texto SQL. –