La diferencia entre Declaración y Declaración Preparada
1.PreparedStatement está precompilado, lo que puede mejorar en gran medida la eficiencia del procesamiento por lotes. También se denomina procedimiento almacenado JDBC.
2. Cuando realice un acceso único a la base de datos, utilice el objeto Declaración para el procesamiento. Los objetos PreparedStatement son más caros que los Statements y no aportan beneficios adicionales a las operaciones únicas.
3. Cada vez que una declaración ejecuta una declaración SQL, la base de datos correspondiente debe ejecutar la compilación de la declaración SQL precompilada y la declaración preparada admite el procesamiento por lotes.
4.
Fragmento de Código 1:
String updateString = "ACTUALIZAR VENTAS DEL SET DE CAFÉS = 75 " + "WHERE COF_NAME COMO ′Colombiano′";
stmt.executeUpdate(updateString);
p>Fragmento de código 2:
PreparedStatement updateSales = con.prepareStatement("ACTUALIZAR VENTAS DEL CONJUNTO DE CAFÉS = ? ¿DÓNDE LE GUSTA COF_NAME? ");
updateSales. setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
La diferencia entre el fragmento 2 y el fragmento 1 es que el último utiliza objetos PreparedStatement, mientras que el primero es un objeto Statement normal. El objeto PreparedStatement no solo contiene la declaración SQL, sino que en la mayoría de los casos esta declaración ha sido precompilada, por lo que cuando se ejecuta, el DBMS solo necesita ejecutar la declaración SQL sin tener que compilarla primero. Cuando necesite ejecutar el objeto Statement varias veces, el objeto PreparedStatement reducirá en gran medida el tiempo de ejecución y, por supuesto, acelerará el acceso a la base de datos.
Esta conversión también le brinda una gran comodidad. No es necesario repetir la sintaxis de la declaración SQL, solo necesita cambiar los valores de las variables para volver a ejecutar la declaración SQL. Elegir un objeto PreparedStatement o no depende de si la instrucción SQL con la misma sintaxis se ejecuta varias veces, y la diferencia entre las dos veces es solo la diferencia en las variables. Si solo se ejecuta una vez, no debería ser diferente de un objeto ordinario, lo que no refleja la superioridad de la precompilación.
5. Los programas JDBC que ejecutan muchas sentencias SQL generan una gran cantidad de objetos Statement y PreparedStatement. Los objetos PreparedStatement generalmente se consideran más eficientes que los objetos Statement, especialmente si la misma declaración SQL con diferentes parámetros se ejecuta varias veces. Los objetos PreparedStatement permiten que la base de datos precompile declaraciones SQL, lo que ahorra tiempo y aumenta la legibilidad del código durante ejecuciones posteriores.
Sin embargo, en un entorno Oracle, los desarrolladores en realidad tienen mayor flexibilidad. Cuando se utilizan objetos Statement o PreparedStatement, Oracle Database almacena en caché las declaraciones SQL para su uso posterior. En algunos casos, la ejecución de un objeto PreparedStatement llevará más tiempo debido al procesamiento adicional requerido por el propio controlador y al aumento de la actividad de la red entre la aplicación Java y el servidor Oracle.
Sin embargo, aparte de los problemas de almacenamiento en búfer, hay al menos una razón mejor para preferir el uso de objetos PreparedStatement en aplicaciones empresariales: la seguridad. Los parámetros pasados a los objetos PreparedStatement se pueden forzar a realizar una conversión de tipo, lo que permite a los desarrolladores asegurarse de que el formato de la base de datos subyacente coincida con el formato de la base de datos subyacente al insertar o consultar datos.
Cuando se trata de datos enviados por usuarios en sitios web públicos, las cuestiones de seguridad se vuelven extremadamente importantes. El controlador ignora automáticamente los parámetros de cadena pasados a PreparedStatement. En su forma más simple, esto significa que cuando su programa intenta insertar la cadena "D'Angelo" en un VARCHAR2, la declaración no reconocerá el primer ",", lo que resultará en un fracaso miserable. Rara vez es necesario crear su propia cadena ignorando el código.
En un entorno web, los usuarios malintencionados pueden aprovechar aplicaciones mal diseñadas que no manejan cadenas correctamente. Especialmente en sitios web públicos, todas las entradas del usuario no deben pasarse a la declaración SQL sin antes procesarse a través de un objeto PreparedStatement. Además, las declaraciones SQL no deben mostrarse donde los usuarios tengan la oportunidad de modificarlas, como en áreas ocultas de HTML o en una cadena de consulta.