|
Embedded SQL (comme en C ou COBOL) et SQLJ (une extension Java) nécessitent des précompilateurs car ils intègrent directement les instructions SQL *dans* le code source du langage hôte. JDBC, quant à lui, traite SQL comme des données transmises à une base de données ; il n'est pas lié au code Java lui-même.
Voici pourquoi un précompilateur est nécessaire pour les approches embarquées mais pas pour JDBC :
* Intégration et compilation de code : Les instructions Embedded SQL et SQLJ ne sont pas comprises par les compilateurs standard C, COBOL ou Java. Le travail du précompilateur consiste à :
* Analyser le SQL : Il analyse les instructions SQL embarquées, vérifie la syntaxe et valide les interactions avec la base de données.
* Générer le code de langue hôte : Il traduit ces instructions SQL en appels à l'API d'un pilote de base de données (ou à des mécanismes d'accès à la base de données de bas niveau équivalents). Cela génère du code en langage hôte qui interagit avec la base de données, gérant la connexion, l'exécution des requêtes et la récupération des résultats.
* Combiner avec le code de langue hôte : Le précompilateur intègre ce code généré dans le code source du programme hôte, créant ainsi un programme complet prêt pour une compilation standard.
* Mappage des types de données : Le précompilateur gère le mappage entre les types de données du langage hôte et les types de données de la base de données. Ceci est crucial car le langage hôte et la base de données peuvent utiliser des représentations différentes pour les nombres, les chaînes, les dates, etc.
* Gestion SQL dynamique : Si le SQL intégré utilise du SQL dynamique (instructions SQL créées au moment de l'exécution), le précompilateur doit générer le code approprié pour gérer la construction et l'exécution de ces requêtes générées dynamiquement.
L'approche différente de JDBC :
JDBC utilise une architecture complètement différente. Les instructions SQL sont traitées comme des chaînes dans le code Java. Le pilote JDBC gère la traduction et l'exécution de ces chaînes. Aucune précompilation n'est nécessaire car :
* Exécution d'exécution : Le SQL est envoyé à la base de données *au moment de l'exécution*. Le pilote JDBC se charge d'analyser et d'exécuter les instructions SQL.
* SQL basé sur des chaînes : SQL est transmis sous forme de chaîne ; le compilateur Java n'a pas besoin de connaissances particulières en syntaxe SQL.
* Responsabilité du conducteur : Le pilote est responsable de toutes les communications avec la base de données, y compris le mappage de types et la gestion des erreurs.
Essentiellement, Embedded SQL et SQLJ nécessitent que les précompilateurs comblent le fossé entre le langage hôte et la base de données au moment de la compilation, tandis que JDBC gère ce pont au moment de l'exécution à l'aide d'un pilote. Cela rend JDBC plus flexible et portable, mais potentiellement moins efficace dans certains cas que l'approche étroitement intégrée de SQL Embedded et SQLJ.
|