基本介紹
編程簡介,詳細簡介,
編程簡介
在一個嵌入式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語句,這套語法規則說明了怎樣將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驅動程式。