JDBC基礎(chǔ)系列專題講座
發(fā)表時間:2024-01-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]1. 介紹 許多開發(fā)者和用戶都在尋找Java程序中訪問數(shù)據(jù)庫的便捷方法。由于Java是一個健壯,安全,易于使用的,易于理解且可以從網(wǎng)絡(luò)中自動download ,所以它成為開發(fā)數(shù)據(jù)庫應(yīng)用的一種良好的語言基礎(chǔ)。 它提供了C,C++,Smalltalk, BASIC, COBOL, and 4G...
1. 介紹
許多開發(fā)者和用戶都在尋找Java程序中訪問數(shù)據(jù)庫的便捷方法。由于Java是一個健壯,安全,易于使用的,易于理解且可以從網(wǎng)絡(luò)中自動download ,所以它成為開發(fā)數(shù)據(jù)庫應(yīng)用的一種良好的語言基礎(chǔ)。
它提供了C,C++,Smalltalk, BASIC, COBOL, and 4GLs的許多優(yōu)點。許多公司已經(jīng)開始在Java與DBMS的連接方面做工作。
許多Java應(yīng)用開發(fā)者都希望能夠編寫?yīng)毩⒂谔囟―BMS的程序,而我們也相信一個獨立于DBMS的接口將使得與各種各樣DBMS連接變得最為便捷,開發(fā)更加迅速。所以我們認(rèn)為定義一個通用的SQL數(shù)據(jù)庫存取框架,在各種各樣的提供數(shù)據(jù)庫連接模塊上提供統(tǒng)一的界面是十分有意義的。
這使程序員可以面對單一的數(shù)據(jù)庫界面,使數(shù)據(jù)庫無關(guān)的Java工具和產(chǎn)品成為可能,使得數(shù)據(jù)庫連接的開發(fā)者可以提供各種各樣的連接方案。我們看到我們定義一個通用低層的,支持基本SQL功能的JavaDataBase Connectivity (JDBC)API的緊迫任務(wù)。
幸運的是我們不必從頭設(shè)計一個SQL API。我們可以把我們的工作建立在 X/Open SQL CLI (調(diào)用層接口)之上(它也是Microsoft"s ODBC 的基礎(chǔ))。
我們主要任務(wù)是定義一個自然的Java接口來與X/Open CLI中定義的基本的抽象層和概念連接。
JDBC API得到數(shù)據(jù)庫開發(fā)廠商,連接開發(fā)廠商,ISV,以及應(yīng)用開發(fā)者的支持是十分重要的。我們相信把我們的工作建立在ODBC抽象層的基礎(chǔ)上將JDBC更加容易得到大家的接受。而且從技術(shù)上來說,ODBC是我們設(shè)計工作的一個良好基礎(chǔ)。
因為ODBC是一個C語言接口,所以O(shè)DBC在Java中直接使用不適當(dāng)。從Java中來調(diào)用C代碼在安全性,健壯性,實現(xiàn)的方便,可移植性等等方面有許多不便。它使得Java在這些方面的許多優(yōu)點得不到發(fā)揮。
我們已經(jīng)在短期里面實現(xiàn)了一個建立在ODBC上的API。長遠來看,我們可以通過其他方式提供實現(xiàn)。
1. 1. 注意
我們非常感謝在數(shù)據(jù)庫,數(shù)據(jù)庫連接和數(shù)據(jù)庫工具領(lǐng)域的許多早期的工作者。他們?yōu)镴DBC的早期草案提供了很好的意見和建議。他們的工作對本規(guī)范起了不可估量的作用。
2. 目標(biāo)與哲學(xué)
這個部分描述了指引這個API開發(fā)的目標(biāo)以及哲學(xué)。
2. 1. SQL 級 API
我們的主要目標(biāo)是為Java定義一個“調(diào)用級”(call-level)的SQL接口。著意味著我們主要的注意力集中在執(zhí)行原原本本的SQL語句并且取回結(jié)果。我們預(yù)計高層的API也將被定義,這些可能將建立在基層的接口上。
這些高層接口包括象直接地、透明地把表里面的數(shù)據(jù)影射到Java類里面,用語法樹表示更加通用的查詢,以及Java內(nèi)嵌的SQL語法。
我們希望大量的應(yīng)用開發(fā)工具將使用我們的API。然而我們也希望程序員能夠使用我們的API,尤其是目前這樣在Java里沒有任何其他手段(應(yīng)該是說數(shù)據(jù)庫訪問手段)的情況下。
2. 2. 遵循SQL
數(shù)據(jù)庫系統(tǒng)支持各式各樣的SQL語法和語義,它們相互之間在比較高級的功能例如外部連接,內(nèi)嵌過程等方面并不一致,盡管我們能夠盼望著隨時間的推移這些部分的SQL可以獲得標(biāo)準(zhǔn)化。同時我們采取這樣的態(tài)度與立場:
In fact, an application query need not even be SQL, or it may be a specialized derivative of SQL, e.g. for document or image queries, designed for specific DBMSs.
In order to pass JDBC compliance tests and to be called "JDBC COMPLIANT " we require that a driver support at least ANSI SQL-2 Entry Level. This gives applications that want wide portability a guaranteed least common denominator. We believe ANSI SQL-2 Entry Level is reasonably powerful and is reasonably widely supported today.
* JDBC允許查詢表達式直接傳遞到底層的數(shù)據(jù)驅(qū)動,這樣一個程序可以獲得盡量多的SQL功能,但是可能被DBMS拒絕。事實上,一個程序的查詢甚至可以不是SQL的,或者是SQL的一個特殊演化,例如:為專門數(shù)據(jù)庫設(shè)計的文本或者圖形查詢。
* 為了通過JDBC兼容的測試,并且能夠被稱為JDBC兼容,我們要求一個驅(qū)動至少支持ANSI SQL-2的標(biāo)準(zhǔn)。這使得那些需要廣泛移植性的程序獲得一個最小的分母(這句話的原文是:This gives applications that want wide portability a guaranteed least common denominator.)。我們相信ANSI SQL-2是足夠強大的,并且是得到足夠支持的。
2. 3. JDBC必須可以建立在現(xiàn)有的數(shù)據(jù)庫接口上
我們必須能夠保證 JDBC SQL API 能夠建立在普通的SQL API上,尤其是ODBC。這些要求已經(jīng)對這個規(guī)范的一些部分產(chǎn)生了影響,尤其是對傳出參數(shù)(OUT parameter)和大數(shù)據(jù)塊的處理。
2. 4. 必須保證這個接口與JAVA系統(tǒng)的其他部分保持一致
目前對JAVA的積極回應(yīng)已經(jīng)十分熱烈。很大程度上是由于這個語言標(biāo)準(zhǔn)以及標(biāo)準(zhǔn)運行時庫被認(rèn)為是一致,簡單和強大的。我們將盡我們所能,提供這個Java數(shù)據(jù)庫接口,這個接口將建立在Java內(nèi)核現(xiàn)有的這種風(fēng)格,并且將進一步加強它。
2. 5. 保持簡單
We would prefer to keep this base API as simple as possible, at least initially.
In general we would prefer to provide a single mechanism for performing a particular task, and avoid provid-ing duplicate mechanisms. We will extend the API later if any important functionality is miss-ing.
我們將力爭使得基本的API盡量簡單,至少開始的時候是這樣的。一般來說,我們希望對實現(xiàn)每個特定的任務(wù)只提供一種方案,而避免提供多種方案。如果一些重要的功能遺漏了,那么我們在晚些時候?qū)U充這個API。
2. 6. 盡量保持強的、靜態(tài)的類型
我們希望這個JDBC API保持盡量強的類型檢查,使得盡可能多的類型信息可以靜態(tài)地表達。著使得盡可能多的錯誤可以在編譯的時候被發(fā)現(xiàn)。
由于SQL本身是動態(tài)類型的,所以我們可能會在程序運行的時候遇到類型不能匹配的問題。例如:當(dāng)一個程序員在希望SELECT返回一個整數(shù),但是實際返回的是一個字符串“foo”。但是我們依然希望程序員把他們所希望的類型在編譯的時候就能夠表達清楚,這樣我們可以做盡可能多的靜態(tài)檢查。我們也希望在必要的時候能夠支持動態(tài)類型接口(見第四章)