SQLJ 语句语法

可将 SQLJ 语句与 SQLJ 文件中的 Java™ 语句混合。

使用 Java 编写的嵌入式 SQL 语句

使用 SQLJ 编写的静态 SQL 语句出现在 SQLJ 子句中。SQLJ 转换程序会识别 SQLJ 子句,原因是它们以标记 #sql 开始并以分号结束。

最简单的 SQLJ 子句是可执行子句,由标记 #sql 及跟在其后的用花括号括起来的 SQL 语句组成。例如,每当 Java 语句可能以合法形式出现时,可能会出现以下 SQLJ 子句。SQLJ 子句的用途是删除表 MYTABLE 中的所有行:

   #sql { DELETE FROM MYTABLE };

使用 Java 编写的主变量

嵌入式 SQL 语句的自变量是通过主变量传递的,这些主变量是出现在 SQL 语句中的 Java 变量。主变量最多有三个部分:

Java 标识可以在生成的 Java 代码中多次出现以替换 SQLJ 子句。

以下查询包含主变量 :x,它是在包含查询的限定作用域中可视的 Java 变量、字段或参数 x

   SELECT  COL1,  COL2  FROM  TABLE1  WHERE  COL3  <  :x

缺省情况下,在复合 SQL 中指定的所有主变量都是输入主变量。必须指定参数方式标识 OUT 或 INOUT,主变量才能将其标记为输出主变量。例如:

   #sql {begin compound atomic static
        select count(*) into :OUT count1 from employee;
        end compound}

SQL 标记

在 SQLJ 可执行子句中,出现在花括号内的标记是 SQL 标记(主变量除外,它们对应于 Java 变量)。主变量的前面必须有冒号字符(:)。SQL 标记决不出现在 SQLJ 可执行子句的花括号的外面。

例如,以下 Java 方法将其自变量的值插入到 SQL 表中。方法主体由包含主变量 xyz 的 SQLJ 可执行子句组成:

   void m (int x, String y, float z) throws SQLException
   {
       #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) };
   }

不要初始化循环中的静态 SQL 语句。每个静态 SQL 语句都必须存在一个语句。例如,以下代码段是无效的:

   for( int i=0; i<2; i++ ){
      #sql [ctx] itr[i] = { SELECT id, name FROM staff };
   }

用以下语句来替换以上的代码段:

   int i=0;
   #sql [ctx] itr[i] = { SELECT id, name FROM staff };
   i=1;
   #sql [ctx] itr[i] = { SELECT id, name FROM staff };

总之,SQL 标记是不区分大小写的(由双引号定界的标识除外),它们可以用大写、小写或混合大小写形式书写。但是,Java 标记是区分大小写的。为了使“SQLJ 帮助”主题中的示例意思明确,不区分大小写的 SQL 标记是大写的,Java 标记是小写或混合大小写的。小写 null 用来表示 Java 空值,大写 NULL 用来表示 SQL 空值。

相关任务
创建 SQLJ 文件
将 SQLJ 支持添加至 Java 项目
从 Java 项目中除去 SQLJ 支持
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.