He aquí por qué se necesita un precompilador para los enfoques integrados, pero no para JDBC:
* Integración y compilación de código: Las declaraciones SQL y SQLJ incrustadas no son entendidas por los compiladores estándar C, COBOL o Java. El trabajo del precompilador es:
* analiza el SQL: Analiza las declaraciones SQL integradas, verificando la sintaxis y la validación de las interacciones de la base de datos.
* Generar código de lenguaje de host: Traduce esas declaraciones SQL en llamadas a una API del controlador de la base de datos (o mecanismos de acceso de base de datos de bajo nivel equivalentes). Esto genera un código del idioma host que interactúa con la base de datos, el manejo de la conexión, la ejecución de la consulta y la recuperación de resultados.
* Combine con el código de lenguaje host: El precompiler teje este código generado nuevamente en el código fuente del programa host, creando un programa completo listo para la compilación estándar.
* Mapeo de tipo de datos: El precompilador maneja la asignación entre los tipos de datos del lenguaje host y los tipos de datos de la base de datos. Esto es crucial porque el lenguaje host y la base de datos pueden usar diferentes representaciones para números, cadenas, fechas, etc.
* Manejo dinámico de SQL: Si el SQL integrado utiliza SQL dinámico (declaraciones SQL construidas en tiempo de ejecución), el precompilador debe generar el código apropiado para manejar la construcción y ejecución de estas consultas generadas dinámicamente.
El enfoque diferente de JDBC:
JDBC utiliza una arquitectura completamente diferente. Las declaraciones SQL se tratan como cadenas dentro del código Java. El controlador JDBC maneja la traducción y ejecución de estas cadenas. No es necesaria precompilación porque:
* Ejecución de tiempo de ejecución: El SQL se envía a la base de datos *en tiempo de ejecución *. El controlador JDBC se encarga de analizar y ejecutar las declaraciones SQL.
* SQL basado en cadenas: SQL se pasa como una cadena; El compilador Java no necesita conocimiento especial de la sintaxis SQL.
* Responsabilidad del conductor: El controlador es responsable de toda comunicación con la base de datos, incluida la asignación de tipos y el manejo de errores.
En esencia, SQL y SQLJ incrustados requieren que los precompiladores cierran la brecha entre el lenguaje host y la base de datos en el momento de la compilación, mientras que JDBC maneja este puente en tiempo de ejecución usando un controlador. Esto hace que JDBC sea más flexible y portátil, pero potencialmente menos eficiente en algunos casos que el enfoque estrechamente integrado de SQL y SQLJ integrados.