SQLJ vous permet d'intégrer des instructions SQL dans des programmes Java. SQLJ est un standard ANSI développé par un consortium des meilleurs éditeurs de logiciels pour serveurs d'application et de bases de données, tels que IBM Corporation, Microsoft Corporation, Sun Microsystems et Oracle.
Le traducteur SQLJ convertit un fichier source SQLJ en un fichier source Java, plus un profil SQLJ en série qui regroupe toutes les informations relatives à l'instruction SQL statique de la source SQLJ. Le traducteur convertit les clauses SQLJ en instructions Java standard en remplaçant les instructions SQL intégrées par des appels vers la bibliothèque d'exécution SQLJ. Un script de personnalisation SQLJ relie le profil SQLJ à la base de données, tout en produisant un ou plusieurs packages de base de données. Le fichier Java est compilé et exécuté (avec les packages) sur la base de données. L'environnement d'exécution SQLJ se compose d'une bibliothèque d'exécution SQLJ implémentée en langage Java pur. La bibliothèque d'exécution SQLJ appelle le pilote JDBC pour la base de données cible, telle que DB2.
Vous pouvez utiliser SQLJ dans le plan de travail pour créer des applications à exécuter avec toute base de données prenant en charge SQLJ (par exemple, DB2 ou Oracle). La fonctionnalité de personnalisation intégrée ne fonctionne qu'avec DB2.
Le plan de travail possède les fonctionnalités SQLJ suivantes :
Bien que SQLJ et JDBC fournissent tous deux des applications Java capables d'accéder à des bases de données relationnelles, il existe de nombreuses différences entre ces deux formats :
En général, le SQL dynamique est plus souple que le SQL statique, car il ne nécessite pas que les instructions SQL soient créées au préalable. Le SQL statique est plus efficace, car la base de données réalise au préalable une grande partie du travail nécessaire à l'exécution des instructions SQL.
Le SQL dynamique offre la possibilité de rechercher et de mettre à jour des tables lorsque, par exemple, vous ne connaissez pas le nombre et les types de colonnes avant l'exécution. À l'aide du SQL dynamique de JDBC, un programme Java peut créer des instructions SQL lors de l'exécution.
Avec le SQL dynamique, l'accès et l'autorisation d'une base de données sont déterminés lors de l'exécution. L'utilisateur de l'application doit posséder tous les privilèges de la base de données nécessaires, et la base de données doit déterminer le meilleur moyen d'accéder aux données lors de l'exécution. Cependant, avec le SQL statique, l'accès et l'autorisation sont déterminés au moment de la personnalisation et de la liaison. Les privilèges de l'utilisateur qui effectue le processus de liaison déterminent ce que l'application peut faire. La base de données détermine le meilleur moyen d'accéder aux données lors de la personnalisation et de la liaison, ce qui améliore les performances d'exécution.
Nombre d'applications n'ont pas besoin de créer dynamiquement des instructions SQL, car les métadonnées de la base de données (telles que les noms de table et de colonne) changent au moment de l'exécution. De telles applications peuvent utiliser le SQL statique qui fournit de meilleures performances que le SQL dynamique.
Outre des performances accrues via l'utilisation du SQL statique, SQLJ possède les avantages suivants par rapport à JDBC :
JDBC peut réaliser une opération que SQLJ ne peut pas faire : exécuter des instructions SQL. En revanche, si une application doit utiliser le SQL dynamique, vous pouvez inclure du code JDBC à votre programme grâce à des clauses SQLJ.
Les clauses SQLJ sont intégrées au code Java. Chaque clause est précédée du symbole #sql. La clause SQLJ suivante est un exemple d'instruction SELECT dotée d'une variable Java dans la clause WHERE :
#sql [ctx] cursor1 = {SELECT EMP_ACT.EMPNO FROM EMP_ACT WHERE EMP_ACT.PROJNO = :strProjNo};
La prise en charge DB2 de SQLJ est basée sur le standard ANSI SQLJ. Les types de constructions SQL suivants peuvent apparaître dans des programmes SQLJ :