Antes de saltar a la diferencia, entendamos lo que JDBC es primero.
JDBC (Java Database Connectivity) es una API de Java para conectar y ejecutar consultas con la base de datos. Es el estándar de la industria para la conectividad independiente de la base de datos que proporciona acceso universal a los datos, especialmente los datos almacenados en bases de datos relacionales. Utiliza controladores JDBC escritos en lenguaje de programación Java para conectar cualquier aplicación Java con la base de datos. Nos permite conectarnos a todas las bases de datos corporativas incluso en un entorno heterogéneo..
Statement y PreparedStatement son clases que representan sentencias de SQL para interactuar con el servidor de base de datos. Vamos a discutirlos en detalle y explicar la diferencia entre los dos.
Statement es una interfaz JDBC utilizada para el acceso de propósito general a la base de datos SQL, especialmente al usar sentencias de SQL estático en el tiempo de ejecución.
Define métodos y propiedades para interactuar con la base de datos mediante comandos SQL o PL / SQL. Se utiliza para ejecutar sentencias de SQL estándar como CREATE, UPDATE, RETREIVE y DELET (CRUD). Funciona como un operador entre un programa Java y la base de datos, pero no puede aceptar parámetros en tiempo de ejecución y no está precompilado, lo que significa que no se puede usar la misma instrucción SQL varias veces, lo que representa un rendimiento lento que PreparedStatement. Es más propenso a la inyección SQL..
Es una versión extendida y poderosa de la interfaz de Statement que puede o no estar parametrizada, lo que significa que, a diferencia de Statement, puede tomar parámetros de entrada que representan un rendimiento más rápido.
También ayuda a escribir código orientado a objetos con métodos de establecimiento que mejoran el rendimiento de las aplicaciones. Y la mejor parte, se ejecuta a través de un protocolo de comunicación binario que no es de SQL, que es básicamente un formato basado en texto no utilizado para comunicarse entre clientes y servidores, lo que finalmente reduce el uso de ancho de banda y por lo tanto promueve llamadas de comunicación más rápidas al servidor.
En términos simples, es un objeto que representa una instrucción SQL precompilada.
JDBC Statement y PreparedStatement son clases que representan sentencias SQL para enviar comandos SQL o PL / SQL y recibir datos de la base de datos. La interfaz de Statement proporciona métodos y propiedades para ejecutar consultas y cambios con la base de datos. Es una interfaz utilizada para el acceso de propósito general a la base de datos, pero no puede aceptar los parámetros IN y OUT. La interfaz PreparedStatement, por otro lado, extiende la interfaz Statement y se utiliza para ejecutar una instrucción SQL precompilada en JDBC, de modo que la misma instrucción SQL se puede usar varias veces.
A diferencia de una instrucción JDBC, PreparedStatement es una instrucción precompilada que significa que cuando se ejecuta, el DBMS puede ejecutar la instrucción SQL sin necesidad de compilarla primero. En términos simples, las instrucciones se pueden ejecutar varias veces sin tener que compilarlas cada vez. Todo lo que hace es extender la interfaz de la Declaración y agregar la capacidad de usar variables de enlace. Esto permite una ejecución más rápida, especialmente cuando se usa con lotes. La Declaración, por otro lado, no está precompilada, lo que la hace menos confiable que PreparedStatement.
Una interfaz de declaración no puede pasar parámetros a consultas SQL en tiempo de ejecución, ya que solo se puede usar para ejecutar sentencias de SQL estático y no puede aceptar parámetros de entrada. Un parámetro de entrada es un marcador de posición en una declaración SQL utilizada para intercambiar datos entre procedimientos almacenados y funciones. La interfaz PreparedStatement, por el contrario, puede pasar parámetros a consultas SQL en tiempo de ejecución y puede tener uno o más parámetros IN que, en última instancia, nos permiten ejecutar consultas dinámicas.
PreparedStatement se ejecuta a través de un protocolo de comunicación binario que no es de SQL, lo que significa que se utiliza un formato no textual para comunicarse entre clientes y servidores en lugar del protocolo de texto menos eficiente. En los protocolos binarios, los datos se envían en formato binario, que es mucho más rápido de analizar y es la forma más rápida y eficiente de conectar un cliente a un servidor. Esto resulta en un menor uso de ancho de banda y llamadas de comunicación más rápidas al servidor, lo que eventualmente acelera las cosas con consultas de selección repetitivas. No se implementa dicho protocolo en la interfaz de Declaración..
Se refiere a un ataque de inyección que podría destruir la base de datos. Es una de las técnicas más comunes para inyectar código malicioso en sentencias de SQL para manipular la base de datos y revelar contenidos al atacante. Se inyecta un código malicioso en una aplicación y luego se pasa a la base de datos SQL para obtener acceso a los diversos recursos o realizar cambios en los datos. PreparedStatement es resistente frente a la inyección de SQL porque utiliza consultas parametrizadas para escapar automáticamente de caracteres especiales como comillas. La declaración no puede escapar a la inyección de SQL ya que usamos cadenas de SQL concatenadas en JDBC.
Las interfaces JDBC Statement y PreparedStatement definen métodos y propiedades para enviar y recibir datos de la base de datos SQL. Si bien una declaración básica es suficiente para ejecutar sentencias SQL simples, es difícil superar la flexibilidad y los beneficios proporcionados por el uso de PreparedStatement. Si bien la interfaz de Statement es un operador de propósito general que se utiliza para ejecutar sentencias de SQL estático, PreparedStatement es una sentencia parametrizada que se utiliza para ejecutar sentencias de SQL dinámico. La principal diferencia entre los dos es que PreparedStatement es una declaración precompilada que significa que el mismo comando SQL se puede usar varias veces, lo que explica un mejor rendimiento y resultados más rápidos.