sqlj

sqlj

SQLJ是一個與Java編程語言緊密集成的嵌入式SQL的版本,這裡"嵌入式SQL"是用來在其宿主通用編程語言如C、C++、Java、Ada和COBOL)中調用SQL語句。

編程簡介


在一個嵌入式SQL程序中,SQL語句可以像其宿主語言中的程序構造一樣得到支持。當然,C和C++也可以通過宿主語言函數調用,即通過開放資料庫連接介面(ODBC)調用SQL語句。與此相似,Java程序可以通過Java資料庫連接JDBC)方法調用來調用SQL語句。但是,我們會看到,這一類的函數調用介面較之嵌入式SQL介面是一個水平相當低的程序介面。因為這時的SQL語句是作為字元串參數傳送給函數而不是直接在宿主語言中嵌入代碼的。

詳細簡介


Oracle8i是Oracle關係型資料庫管理系統(OracleRDBMS)的最新版本,在此版本中,特彆強調了Java編程語言和Internet/Intranet資料庫應用程序的開發。Oracle8i的重要的特性之一就是全面和高效地支持SQLJ。與Oracle8一樣,Oracle8i不僅提供對關係型資料庫處理的強有力的支持,同時還支持一些對象-關係型結構,如集合類型、用戶定義類型和對象類型。
SQLJ由一系列定義了SQL與Java之間相互作用的子句和程序擴充組成。SQLJ是在Java編程語言中靜態嵌入式SQL,換句話說,一個SQLJ程序是一個包含靜態嵌入式SQL語句的Java程序。請注意,在靜態嵌入式SQL中,所有嵌入到程序中的SQL語句在編譯時都是已知的。而在動態嵌入式SQL中,至少有一些SQL語句是等到運行時才被確定的。SQLJ通過這種靜態嵌入式SQL模型完善了JDBC動態嵌入式SQL模型,這是因為JDBC只提供給Java一個動態嵌入式SQL介面,而SQLJ提供了一個靜態嵌入式SQL介面。從此,通過使用SQLJ,Java程序員們在Java和SQL之間有了兩種不同的程序介面:JDBC和SQLJ。其他編程語言,諸如C、C++、FORTRAN、COBOL和Ada基本上使用同一種嵌入式SQL,而SQLJ作為一個與ANSI標準多少有些不同的嵌入式SQL一直為Java所專用。這就引出了一個問題:為什麼唯獨Java有其自己的嵌入式SQL,而其他的編程語言共用一個嵌入式SQL?原因之一是SQLJ與Java的緊密耦合,特別是Java類可在SQL表中作為欄位類型使用。還有,SQLJ提供了游標結構的一種強類型版本,又稱為迭代器,這種迭代器結構巧妙地集成到Java語言中,每一個迭代器是一個Java類。同時要注意的是,與SQLJ不同,其他編程語言的嵌入式SQL同時包括靜態和動態SQL構造。
SQLJ作為一個新的標準的出現是多個廠商共同努力以求在Java程序中提供對靜態嵌入式SQL支持的結果。正如我們所看到的,一個"純"SQLJ程序是靜態的,因為所有的SQL語句都必須在編譯以前確定。但是,在一個SQLJ語句之內包含JDBC調用會使該程序成為動態的,因為程序可將SQL語句組織成一個字元串,然後將該字元串傳送給JDBC方法去執行。SQLJ可用來在JServer環境下執行存儲過程、觸發器和類,也可用於Enterprise JavaBeans和CORBA.
SQLJ由一系列子句組成,這些子句擴展了Java程序。語言的標準說明是一個聯合說明,它由包括IBM、Compaq/Tandem、JavaSoft、Oracle、SybaseInformix在內的主要資料庫工具廠商和資料庫廠商所聯合支持。SQLJ提供了在訪問資料庫的客戶端和中間件以及在利用Java的數據伺服器端開發應用程序的方法。SQLJ應用程序是可移植的,並且可以使用標準JDBC驅動程序與多廠商的資料庫進行通信。
當編寫一個SQLJ程序(源代碼)時,所編寫的是一個Java程序並按一定的語法規則嵌入式SQL語句,這套語法規則說明了怎樣將SQL語句嵌入到Java源代碼中。然後運行一個SQLJ翻譯器將SQLJ程序轉換為一個標準Java程序。一個Oracle SQLJ翻譯器在原理上與其他Oracle 嵌入式SQL預編譯器類似。SQLJ翻譯器完成下列工作:
* 對嵌入式SQL構造進行語法檢查。
* Java和SQL數據類型檢查。
* 模式檢查。
翻譯時,SQL翻譯器用SQLJ運行時庫中的調用來替代嵌入式SQLJ語句,該運行時庫真正實現SQL操作。這樣翻譯的結果是得到一個可使用任何Java翻譯器進行編譯的Java源程序。一旦Java源程序被編譯,Java執行程序就可在任何資料庫上運行。
SQLJ運行環境由純Java實現的小SQLJ運行時庫(小,意指其中包括少量的代碼)組成,該運行時庫轉而調用相應資料庫的JDBC驅動程序。
一個SQLJ程序可以在多種環境下運行。所編寫的SQLJ程序可以在客戶端進行,不管是在瘦客戶端如Web瀏覽器和網路計算機上,還是在一個工作站或PC上。由於這種位置的透明性,使得用戶可以很方便地將SQLJ程序從一個地方移植到另一個地方或從一個系統移植到另一個系統。