SQLJ 簡介

SQLJ 讓您能將 SQL 陳述式內嵌到 Java™ 程式中。 SQLJ 是先進的資料庫及應用程式伺服器軟體提供者聯合組織(包括 IBM® Corporation、Microsoft® Corporation、Sun Microsystems 及 Oracle)所共同開發的 ANSI 標準。

SQLJ 轉換器將 SQLJ 程式檔轉換成標準的 Java 程式檔加上一個按 SQLJ 序列化的設定檔, 此設定檔將靜態 SQL 的相關資訊封裝在 SQLJ 程式碼中。轉換器再以 SQLJ Runtime Library 呼叫替換內嵌的 SQL 陳述式, 將 SQLJ 子句轉換成標準的 Java 陳述式。 SQLJ 自訂 Script 將 SQLJ 設定檔連結到資料庫, 產生一或多個資料庫套件。Java 檔在資料庫上編譯及執行(與套件一起)。SQLJ 執行環境是由在 Pure Java 中實作的 SQLJ Runtime Library 所組成。SQLJ Runtime Library 呼叫目標資料庫(如 DB2 Universal Database™)的 JDBC 驅動程式。

您可以在工作台中使用 SQLJ, 建立與任何支援 SQLJ 的資料庫(例如,DB2 Universal Database 或 Oracle)一起執行的應用程式。不過內建的自訂特性僅適用於 DB2 Universal Database™。

「工作台」具有下列 SQLJ 特性:

SQLJ 與 JDBC

雖然 SQLJ 和 JDBC 都提供 Java 應用程式存取關聯式資料庫的功能, 但是它們之間存有數項差異:

動態 SQL 與靜態 SQL 的比較

一般而言,動態 SQL 比靜態 SQL 更富彈性,因為它不需要預先建立 SQL 陳述式。靜態 SQL 比較有效率, 因為在執行時期之前,資料庫就已經完成了不少執行 SQL 陳述式所需的工作。

舉例而言, 當您在執行時期之前對直欄的數目和類型一無所悉時, 動態 SQL 可提供查詢及更新表格的能力。如果在 JDBC 中使用動態 SQL,Java 程式可以在執行時期建立 SQL 陳述式。

如果是使用動態 SQL, 則是在執行時期決定資料庫存取權和授權。 應用程式的使用者必須具有所有的必要資料庫專用權, 而資料庫必須在執行時期決定存取所需資料的最佳方式。然而,若是使用靜態 SQL, 則是在自訂及連結時期決定存取權和授權。執行連結程序之使用者的專用權決定應用程式可以執行的項目。資料庫則在自訂及連結時期決定存取資料的最佳方式, 這可以增進執行時期的效能。

許多應用程式都不需要動態建立 SQL 陳述式, 因為資料庫 Meta 資料(如表格和直欄名稱)在執行時期並不會變更。這種應用程式可以使用靜態 SQL, 其提供的效能比動態 SQL 還要好。

SQLJ 的優點

除了透過使用靜態 SQL 獲取較佳的效能之外,SQLJ 還具有凌駕 JDBC 的下列優點:

JDBC 可以執行 SQLJ 無法執行的唯一一件事是:執行動態 SQL 陳述式。 不過,如果應用程式需要使用動態 SQL, 則您可以利用 SQLJ 子句將一些 JDBC 程式碼併入在程式中。

SQLJ 語法

SQLJ 子句內嵌到 Java 程式碼中。 每一個子句前面都有一個符號 #sql。下列 SQLJ 子句是 SELECT 陳述式的一個例子, 該陳述式的 WHERE 子句中有一個 Java 變數:

#sql [ctx] cursor1 = {SELECT EMP_ACT.EMPNO FROM EMP_ACT WHERE
EMP_ACT.PROJNO = :strProjNo};

DB2 Universal Database 中的 SQLJ

DB2® SQLJ 支援係以 SQLJ ANSI 標準為基礎。下列類型的 SQL 建構可以出現在 SQLJ 程式中:

相關概念
使用 SQLJ 的應用程式效能
相關參考
SQLJ 陳述式語法
SQLJ (DB2 Universal Database) 的限制
讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.