SQLJ 使您能够将 SQL 语句嵌入至 Java™ 程序。SQLJ 是由领先业界的数据库和应用程序服务器软件提供商联合开发的 ANSI 标准,这些提供商包括 IBM® 公司、Microsoft® Corporation、Sun Microsystems 和 Oracle。
SQLJ 转换程序将 SQLJ 源文件转换为标准的 Java 源文件以及封装有关 SQLJ 源文件中静态 SQL 信息的 SQLJ 序列化概要文件。转换程序通过将嵌入式 SQL 语句替换为对 SQLJ 运行时库的调用来将 SQLJ 子句转换为标准 Java 语句。SQLJ 定制脚本将 SQLJ 概要文件绑定至数据库,这会产生一个或多个包。Java 文件(同包一起)在数据库上编译和运行 。SQLJ 运行时环境由在纯 Java 中实现的 SQLJ 运行时库组成。SQLJ 运行时库调用目标数据库(例如,DB2 通用数据库™)的 JDBC 驱动程序。
可以在工作台中使用 SQLJ 来创建要与支持 SQLJ 的任何数据库(例如,DB2 通用数据库或 Oracle)一起运行的应用程序。内置定制功能部件只与 DB2 通用数据库配合工作。
“工作台”具有下列 SQLJ 功能部件:
虽然 SQLJ 和 JDBC 都为 Java 应用程序提供访问关系数据库的功能,但是这两者之间存在一些差别:
通常,动态 SQL 比静态 SQL 更加灵活,原因是它不需要预先创建 SQL 语句。而静态 SQL 更有效率,原因是在运行时之前数据库已完成了运行 SQL 语句所需的许多工作。
动态 SQL 提供了查询和更新表的功能,例如,当在运行时之前不了解列的数目和类型时。通过在 JDBC 中使用动态 SQL,Java 程序可以在运行时创建 SQL 语句。
借助动态 SQL,可在运行时确定数据库访问和授权。应用程序的用户必须具备所有必需的数据库特权,并且该数据库必须确定在运行时访问所需数据的最好方法。然而,借助静态 SQL,可以在定制和绑定时确定访问和授权。执行绑定过程的用户特权确定应用程序可执行的内容。此数据库确定在定制和绑定时访问数据的最好方法,这会改善运行时性能。
许多应用程序不需要动态创建 SQL 语句,原因是数据库元数据(例如,表和列名)不在运行时更改。这样的应用程序可以使用静态 SQL,静态 SQL 比动态 SQL 提供更好的性能。
除了通过使用静态 SQL 可以得到较好的性能之外,同 JDBC 相比,SQLJ 还有下列优点:
JDBC 可以完成 SQLJ 不能完成的一个任务:执行动态 SQL 语句。但是,如果应用程序需要使用动态 SQL,则可以将一些 JDBC 代码与 SQLJ 子句一起包括在程序中。
将 SQLJ 子句嵌入到 Java 代码。每个子句之前都加上了符号 #sql。以下 SQLJ 子句是在 WHERE 子句中带有 Java 变量的 SELECT 语句的示例:
#sql [ctx] cursor1 = {SELECT EMP_ACT.EMPNO FROM EMP_ACT WHERE EMP_ACT.PROJNO = :strProjNo};
DB2® SQLJ 支持是基于 SQLJ ANSI 标准的。下列类型的 SQL 构造可能出现在 SQLJ 程序中: