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 都提供 Java 應用程式存取關聯式資料庫的功能, 但是它們之間存有數項差異:
一般而言,動態 SQL 比靜態 SQL 更富彈性,因為它不需要預先建立 SQL 陳述式。靜態 SQL 比較有效率, 因為在執行時期之前,資料庫就已經完成了不少執行 SQL 陳述式所需的工作。
舉例而言, 當您在執行時期之前對直欄的數目和類型一無所悉時, 動態 SQL 可提供查詢及更新表格的能力。如果在 JDBC 中使用動態 SQL,Java 程式可以在執行時期建立 SQL 陳述式。
如果是使用動態 SQL, 則是在執行時期決定資料庫存取權和授權。 應用程式的使用者必須具有所有的必要資料庫專用權, 而資料庫必須在執行時期決定存取所需資料的最佳方式。然而,若是使用靜態 SQL, 則是在自訂及連結時期決定存取權和授權。執行連結程序之使用者的專用權決定應用程式可以執行的項目。資料庫則在自訂及連結時期決定存取資料的最佳方式, 這可以增進執行時期的效能。
許多應用程式都不需要動態建立 SQL 陳述式, 因為資料庫 Meta 資料(如表格和直欄名稱)在執行時期並不會變更。這種應用程式可以使用靜態 SQL, 其提供的效能比動態 SQL 還要好。
除了透過使用靜態 SQL 獲取較佳的效能之外,SQLJ 還具有凌駕 JDBC 的下列優點:
JDBC 可以執行 SQLJ 無法執行的唯一一件事是:執行動態 SQL 陳述式。 不過,如果應用程式需要使用動態 SQL, 則您可以利用 SQLJ 子句將一些 JDBC 程式碼併入在程式中。
SQLJ 子句內嵌到 Java 程式碼中。 每一個子句前面都有一個符號 #sql。下列 SQLJ 子句是 SELECT 陳述式的一個例子, 該陳述式的 WHERE 子句中有一個 Java 變數:
#sql [ctx] cursor1 = {SELECT EMP_ACT.EMPNO FROM EMP_ACT WHERE EMP_ACT.PROJNO = :strProjNo};
DB2® SQLJ 支援係以 SQLJ ANSI 標準為基礎。下列類型的 SQL 建構可以出現在 SQLJ 程式中: