在 Java 应用程序中嵌入 SQL 语句

SQLJ 中的静态 SQL 语句位于 SQLJ 子句中。 SQLJ 子句以 #sql 开头并以分号 (;) 字符结尾。

在 Java™ 应用程序中创建任何 SQLJ 子句之前,请导入以下包:

  • import java.sql.*;
  • 导入 sqlj.runtime。*;
  • 导入 sqlj.runtime.ref. *;

最简单的 SQLJ 子句是可以处理的子句,由标记 #sql 后跟括在花括号内的 SQL 语句组成。 例如,以下 SQLJ 子句可能出现在 Java 语句可能合法出现的任何位置:

#sql { DELETE FROM TAB };

上一个示例将删除名为 TAB 的表中的所有行。

在 SQLJ 进程子句中,出现在花括号内的标记是 SQL 标记或主变量。 所有主变量都由冒号 (:) 字符区分。 SQL 标记从不出现在 SQLJ 进程子句的花括号之外。 例如,以下 Java 方法将其自变量插入到 SQL 表中:


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

方法主体由包含主变量 x , y 和 z 的 SQLJ 进程子句组成。

通常, SQL 标记不区分大小写 (由双引号定界的标识除外) ,可以用大写,小写或混合大小写编写。 但是, Java 令牌区分大小写。 为使示例清晰明了,不区分大小写的 SQL 标记为大写,而 Java 标记为小写或混合大小写。 在本主题中,小写 null 用于表示 Java "null" 值,大写 NULL 用于表示 SQL "null" 值。

以下类型的 SQL 构造可能出现在 SQLJ 程序中:

  • 例如,查询 SELECT 语句和表达式。
  • SQL 数据更改语句 (DML) ,例如 INSERT , UPDATE 和 DELETE。
  • 数据语句例如, FETCH 和 SELECT。INTO。
  • 事务控制语句,例如, COMMIT , ROLLBACK 等。
  • 数据定义语言 (DDL ,也称为模式操作语言) 语句,例如 CREATE , DROP 和 ALTER。
  • 对存储过程的调用例如, CALL MYPROC (:x , :y , :z)
  • 调用存储函数例如 VALUES (MYFUN (:x))