2011-03-31 7 views
9

¿Qué significa "precompilar" una instrucción, porque he visto que si escribo una sentencia preparada con una sintaxis SQL incorrecta que indica que la compilación no informa ningún problema!¿Qué hace la precompilación de un JDBC PreparedStatement?

Entonces, si precompilar una declaración preparada no verifica la validez de la sintaxis, ¿qué es lo que realmente hace?

+0

¿dónde esperas el error? en tiempo de compilación, o cuando llama a 'prepare .. (..)' – Bozho

+2

Esto depende de la base de datos y del controlador. La especificación JDBC no dicta esto. – skaffman

+0

cuando llamo prepareStatement – xdevel2000

Respuesta

14

La creación de un PreparedStatements puede o no implicar la validación de sintaxis SQL o incluso el servidor de base de datos, que depende por completo del controlador JDBC utilizado. Algunos conductores harán una ida y vuelta o validarán, otros no.

Por lo tanto, en algunos controladores JDBC, un PreparedStatement no está más "preparado" que un Statement normal. (En otras palabras: con algunos controladores JDBC, PreparedStatement representa un recurso del lado del servidor (similar a Connection), mientras que en otros es una construcción pura del lado del cliente).

Sin embargo, una diferencia importante es que PreparedStatement lo ayudará a manejar valores de parámetros dinámicos de forma que se garantice evitar problemas de escaneo o formateo que tendría si intentara insertar los valores en la cadena de instrucción SQL manualmente y ejecutarlo usando un Statement normal.

Esa característica es indepdendent de la opción de "preparar" la declaración de antemano o no, por lo que la proporciona cada controlador JDBC, incluso si no realiza ningún otro paso de preparación.

+0

... por lo que podemos decir que el método prepareStatement envía a la base de datos la cadena SQL para la compilación y, si se proporciona, el DB realiza una comprobación de validación. Después de la instrucción compilada, se reenvía y se encapsula en un objeto PreparedStatement. – xdevel2000

+1

@xdevel: sí, algunos controladores/bases de datos JDBC hacen eso. El servidor devuelve un identificador, por lo general. Luego, cuando ejecuta el 'PreparedStatement', el controlador JDBC simplemente le dice al servidor" Ejecute el enunciado 4 con estos argumentos: ... "). –

1

'compilación de extractos' es algo que sucede en la base de datos que ayuda a devolver los resultados de manera más rápida y eficiente. Si usa un PreparedStatement, entonces permite que la base de datos reutilice una declaración que ya se compiló y ahorra tener que volver a hacerlo. El mal SQL probablemente resultará en una declaración de base de datos mal compilada, pero no siempre.

Cuestiones relacionadas