uso titledborder poner layouts crear con borde java mysql connection prepared-statement

titledborder - ¿Debo utilizar PreparedStatements para todas las inserciones de mi base de datos en Java?



titledborder java (5)

Nunca debe construir una consulta SQL usted mismo usando la concatenación de cadenas. Nunca debe escaparse manualmente de variables / datos de usuario al construir una consulta SQL. El escape real requerido depende de su base de datos subyacente, y en algún momento alguien se olvidará de escapar.

El punto es este: con declaraciones preparadas, es imposible crear una declaración inyectable de SQL. Con escape personalizado, es posible. La elección es obvia.

¿Cuál es el método recomendado para escanear variables antes de insertarlas en la base de datos en Java?

Según tengo entendido, puedo usar PreparedStatement.setString () para escapar de los datos, pero PreparedStatement parece algo poco práctico si no planeo ejecutar la misma consulta nunca más. ¿Hay una forma mejor de hacerlo sin preparar cada consulta?


Preparar una declaración no es tan caro. Es más seguro que la mayoría de las alternativas.


He escuchado el argumento de que PreparedStatement cuesta un poco de sobrecarga adicional sobre una declaración simple, y que debería ser seguro si no concateno la entrada del usuario en mi consulta. Esto puede ser cierto, pero el costo adicional no es mucho y las consultas SQL cambian con el tiempo. Si comienza a usar un Estado de cuenta hoy porque ha demostrado que su consulta es a prueba de inyecciones, se está preparando para el fallo el día en que un programador de mantenimiento cambia el SQL para aceptar la entrada del usuario, pero no lo hace. piense en cambiar esa Declaración a un Estado Preparado. Mi consejo es usar siempre una declaración preparada para evitar problemas antes de que te encuentre.


Mejor aún, no use la API de JDBC directamente, ya que es propensa a errores (por ejemplo, no limpiar todos los recursos correctamente en todos los casos). Utilice un objeto auxiliar JDBC, como la interfaz JdbcOperations de Spring, que reduce considerablemente el tamaño y el funcionamiento de su código. Si solo usa Spring para esta característica, aún se ha hecho un favor masivo en comparación con el uso de la API de JDBC directamente.


Sí, use declaraciones preparadas para todo.

  1. Ellos son analizados una vez.

  2. Son inmunes a los ataques de inyección SQL.

  3. Son un mejor diseño porque tienes que pensar en tu SQL y cómo se usa.

Si crees que solo se usan una vez, no estás viendo el panorama general. Algún día, sus datos o su aplicación cambiarán.

Editar.

¿Por qué las declaraciones preparadas te hacen pensar en tu SQL?

  • Cuando ensambla una cadena (o simplemente ejecuta un bloque literal de texto) no está creando un nuevo objeto PreparedStatement . Simplemente estás ejecutando SQL, se puede hacer de manera muy casual.

  • Cuando tiene que crear (y guardar) un Estado PreparedStatement , tiene que pensar un poco más acerca de la encapsulación, la asignación de responsabilidades. La preparación de una declaración es un evento con estado antes de realizar cualquier procesamiento de SQL.

El trabajo adicional es pequeño, pero no insignificante. Es lo que hace que las personas comiencen a pensar en ORM y en una capa de caché de datos, y cosas así para optimizar su acceso a la base de datos.

Con las declaraciones preparadas, el acceso a la base de datos es menos casual, más intencional.