亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

JDBC編程基礎(chǔ)

2019-11-18 13:59:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  1. 介紹

許多開(kāi)發(fā)者和用戶都在尋找java程序中訪問(wèn)數(shù)據(jù)庫(kù)的便捷方法。由于Java是一個(gè)健壯,安全,易于使用的,易于理解且可以從網(wǎng)絡(luò)中自動(dòng)download ,所以它成為開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用的一種良好的語(yǔ)言基礎(chǔ)。它提供了C,C ,Smalltalk, BASIC, COBOL, and 4GLs的許多優(yōu)點(diǎn)。許多公司已經(jīng)開(kāi)始在Java與DBMS的連接方面做工作。

許多Java應(yīng)用開(kāi)發(fā)者都希望能夠編寫?yīng)毩⒂谔囟―BMS的程序,而我們也相信一個(gè)獨(dú)立于DBMS的接口將使得與各種各樣DBMS連接變得最為便捷,開(kāi)發(fā)更加迅速。所以我們認(rèn)為定義一個(gè)通用的SQL數(shù)據(jù)庫(kù)存取框架,在各種各樣的提供數(shù)據(jù)庫(kù)連接模塊上提供統(tǒng)一的界面是十分有意義的。這使程序員可以面對(duì)單一的數(shù)據(jù)庫(kù)界面,使數(shù)據(jù)庫(kù)無(wú)關(guān)的Java工具和產(chǎn)品成為可能,使得數(shù)據(jù)庫(kù)連接的開(kāi)發(fā)者可以提供各種各樣的連接方案。我們看到我們定義一個(gè)通用低層的,支持基本SQL功能的Java DataBase Connectivity (JDBC)API的緊迫任務(wù)。

幸運(yùn)的是我們不必從頭設(shè)計(jì)一個(gè)SQL API。我們可以把我們的工作建立在 X/Open SQL CLI (調(diào)用層接口)之上(它也是Microsoft´s ODBC 的基礎(chǔ))。
我們主要任務(wù)是定義一個(gè)自然的Java接口來(lái)與X/Open CLI中定義的基本的抽象層和概念連接。

JDBC API得到數(shù)據(jù)庫(kù)開(kāi)發(fā)廠商,連接開(kāi)發(fā)廠商,ISV,以及應(yīng)用開(kāi)發(fā)者的支持是十分重要的。我們相信把我們的工作建立在ODBC抽象層的基礎(chǔ)上將JDBC更加輕易得到大家的接受。而且從技術(shù)上來(lái)說(shuō),ODBC是我們?cè)O(shè)計(jì)工作的一個(gè)良好基礎(chǔ)。

因?yàn)镺DBC是一個(gè)C語(yǔ)言接口,所以O(shè)DBC在Java中直接使用不適當(dāng)。從Java中來(lái)調(diào)用C代碼在安全性,健壯性,實(shí)現(xiàn)的方便,可移植性等等方面有許多不便。它使得Java在這些方面的許多優(yōu)點(diǎn)得不到發(fā)揮。

我們已經(jīng)在短期里面實(shí)現(xiàn)了一個(gè)建立在ODBC上的API。長(zhǎng)遠(yuǎn)來(lái)看,我們可以通過(guò)其他方式提供實(shí)現(xiàn)。


1.1. 注重
我們非常感謝在數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)連接和數(shù)據(jù)庫(kù)工具領(lǐng)域的許多早期的工作者。他們?yōu)镴DBC的早期草案提供了很好的意見(jiàn)和建議。他們的工作對(duì)本規(guī)范起了不可估量的作用。

2. 目標(biāo)與哲學(xué)

這個(gè)部分描述了指引這個(gè)API開(kāi)發(fā)的目標(biāo)以及哲學(xué)。

2.1. SQL 級(jí) API

我們的主要目標(biāo)是為Java定義一個(gè)“調(diào)用級(jí)”(call-level)的SQL接口。著意味著我們主要的注重力集中在執(zhí)行原原本本的SQL語(yǔ)句并且取回結(jié)果。我們預(yù)計(jì)高層的API也將被定義,這些可能將建立在基層的接口上。這些高層接口包括象直接地、透明地把表里面的數(shù)據(jù)影射到Java類里面,用語(yǔ)法樹(shù)表示更加通用的查詢,以及Java內(nèi)嵌的SQL語(yǔ)法。

我們希望大量的應(yīng)用開(kāi)發(fā)工具將使用我們的API。然而我們也希望程序員能夠使用我們的API,尤其是目前這樣在Java里沒(méi)有任何其他手段(應(yīng)該是說(shuō)數(shù)據(jù)庫(kù)訪問(wèn)手段)的情況下。

2.2. 遵循SQL

數(shù)據(jù)庫(kù)系統(tǒng)支持各式各樣的SQL語(yǔ)法和語(yǔ)義,它們相互之間在比較高級(jí)的功能例如外部連接,內(nèi)嵌過(guò)程等方面并不一致,盡管我們能夠盼望著隨時(shí)間的推移這些部分的SQL可以獲得標(biāo)準(zhǔn)化。同時(shí)我們采取這樣的態(tài)度與立場(chǎng):

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答應(yīng)查詢表達(dá)式直接傳遞到底層的數(shù)據(jù)驅(qū)動(dòng),這樣一個(gè)程序可以獲得盡量多的SQL功能,但是可能被DBMS拒絕。事實(shí)上,一個(gè)程序的查詢甚至可以不是SQL的,或者是SQL的一個(gè)非凡演化,例如:為專門數(shù)據(jù)庫(kù)設(shè)計(jì)的文本或者圖形查詢。
為了通過(guò)JDBC兼容的測(cè)試,并且能夠被稱為JDBC兼容,我們要求一個(gè)驅(qū)動(dòng)至少支持ANSI SQL-2的標(biāo)準(zhǔn)。這使得那些需要廣泛移植性的程序獲得一個(gè)最小的分母(這句話的原文是:
This gives applications that want wide portability a guaranteed least common denominator.)。
我們相信ANSI SQL-2是足夠強(qiáng)大的,并且是得到足夠支持的。

2.3. JDBC必須可以建立在現(xiàn)有的數(shù)據(jù)庫(kù)接口上

我們必須能夠保證 JDBC SQL API 能夠建立在普通的SQL API上,尤其是ODBC。這些要求已經(jīng)對(duì)這個(gè)規(guī)范的一些部分產(chǎn)生了影響,尤其是對(duì)傳出參數(shù)(OUT parameter)和大數(shù)據(jù)塊的處理。

2.4. 必須保證這個(gè)接口與JAVA系統(tǒng)的其他部分保持一致

目前對(duì)JAVA的積極回應(yīng)已經(jīng)十分熱烈。很大程度上是由于這個(gè)語(yǔ)言標(biāo)準(zhǔn)以及標(biāo)準(zhǔn)運(yùn)行時(shí)庫(kù)被認(rèn)為是一致,簡(jiǎn)單和強(qiáng)大的。我們將盡我們所能,提供這個(gè)Java數(shù)據(jù)庫(kù)接口,這個(gè)接口將建立在Java內(nèi)核現(xiàn)有的這種風(fēng)格,并且將進(jìn)一步加強(qiáng)它。

2.5. 保持簡(jiǎn)單

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.

我們將力爭(zhēng)使得基本的API盡量簡(jiǎn)單,至少開(kāi)始的時(shí)候是這樣的。一般來(lái)說(shuō),我們希望對(duì)實(shí)現(xiàn)每個(gè)特定的任務(wù)只提供一種方案,而避免提供多種方案。假如一些重要的功能遺漏了,那么我們?cè)谕硇r(shí)候?qū)U(kuò)充這個(gè)API。

2.6. 盡量保持強(qiáng)的、靜態(tài)的類型

我們希望這個(gè)JDBC API保持盡量強(qiáng)的類型檢查,使得盡可能多的類型信息可以靜態(tài)地表達(dá)。著使得盡可能多的錯(cuò)誤可以在編譯的時(shí)候被發(fā)現(xiàn)。

由于SQL本身是動(dòng)態(tài)類型的,所以我們可能會(huì)在程序運(yùn)行的時(shí)候碰到類型不能匹配的問(wèn)題。例如:
當(dāng)一個(gè)程序員在希望SELECT返回一個(gè)整數(shù),但是實(shí)際返回的是一個(gè)字符串“foo”.但是我們依然希望程序員把他們所希望的類型在編譯的時(shí)候就能夠表達(dá)清楚,這樣我們可以做盡可能多的靜態(tài)檢查。我們也希望在必要的時(shí)候能夠支持動(dòng)態(tài)類型接口(見(jiàn)第四章)
2.7. 使普通任務(wù)簡(jiǎn)化

我們希望普通的任務(wù)能夠是簡(jiǎn)單的,而不一般的工作是可行的。

一個(gè)普通任務(wù)是指一個(gè)程序員執(zhí)行一個(gè)簡(jiǎn)單的沒(méi)有參數(shù)的SQL語(yǔ)句(例如:SELECT,INSERT,UPDATE,DELETE),然后(例如SELECT)處理返回的具有簡(jiǎn)單類型的元組。一個(gè)具有傳入?yún)?shù)(IN parameter)的SQL語(yǔ)句也是普通的。不那么普通但是也是十分重要的情形是當(dāng)程序員使用有INOUT,OUT參數(shù)的SQL語(yǔ)句。我們
也需要支持讀寫幾兆字節(jié)對(duì)象的SQL語(yǔ)句,更非凡一些的情形包括一個(gè)語(yǔ)句返回了多個(gè)結(jié)果集合。

我們希望元數(shù)據(jù)(Meatdata)的使用很少的,只是那些熟練的程序員以及開(kāi)發(fā)工具才需要處理的問(wèn)題。元數(shù)據(jù)存取函數(shù)以及動(dòng)態(tài)類型數(shù)據(jù)存取函數(shù)在這個(gè)文檔末尾,一般的程序員可以不必關(guān)心這些章節(jié)。

2.8. 不同的功能讓不同的方法(函數(shù))來(lái)實(shí)現(xiàn)

(“方法”的原文是:method,這樣翻譯是跟VB的)一種界面設(shè)計(jì)風(fēng)格是使用很少的過(guò)程,提供許多作為參數(shù)傳遞的控制標(biāo)志,這樣它們可以用來(lái)影響很大一個(gè)范圍內(nèi)的各種行為。來(lái)表達(dá)不同的功能。這趨向與使用很多的方法,但是每個(gè)方法都比較同意理解。

一般來(lái)說(shuō),Java內(nèi)核類使用不同的方法(method)。這個(gè)步驟的主要優(yōu)點(diǎn)是開(kāi)始學(xué)習(xí)基本界面的程序員可以不必被那些與復(fù)雜功能相關(guān)的參數(shù)所困擾。我們力圖在JDBC接口上也采用相同的策略。一般來(lái)說(shuō)采用不同的方法而不是采用不同的標(biāo)志和多用途的方法。

3. 接口概貌

接口分為兩個(gè)層次,一個(gè)是面向程序開(kāi)發(fā)人員的JDBC API。另外一個(gè)是底層的JDBC Driver API。

3.1. JDBC API

JDBC API 被描述成為彝族抽象的Java接口,似的應(yīng)用程序遠(yuǎn)可以對(duì)某個(gè)數(shù)據(jù)庫(kù)打開(kāi)連接,執(zhí)行SQL語(yǔ)句并且處理結(jié)果。錯(cuò)誤! 嵌入對(duì)象無(wú)效。

最重要的接口是:

java.sql.DriverManager 處理驅(qū)動(dòng)的調(diào)入并且對(duì)產(chǎn)生新的數(shù)據(jù)庫(kù)連接提供支持。

java.sql.Connection 代表對(duì)特定數(shù)據(jù)庫(kù)的連接。

java.sql.Statement  代表一個(gè)特定的容器,來(lái)對(duì)一個(gè)特定的數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句。

java.sql.ResultSet  控制對(duì)一個(gè)特定語(yǔ)句的行數(shù)據(jù)的存取。其中java.sql.Statement又有兩個(gè)子類型:

1. java.sql.PreparedStatement  用于執(zhí)行預(yù)編譯的SQL語(yǔ)句。

2. java.sql.CallableStatement  用于執(zhí)行對(duì)一個(gè)數(shù)據(jù)庫(kù)內(nèi)嵌過(guò)程的調(diào)用。

下面的章節(jié)對(duì)JDBC是如何運(yùn)行的提供了更多描述,整個(gè)定義見(jiàn)第13章。另外第15章描述了系統(tǒng)假如獲取數(shù)據(jù)庫(kù)的元數(shù)據(jù)信息。

3.2. JDBC Driver API

java.sql.Driver在第9章有完整的定義了.大部分JDBC驅(qū)動(dòng)只需要完成這些JDBC API所定義的抽象類就可以了。非凡地,所有的driver必須提供對(duì)java.sql.Connection,java.sql.State-ment, java.sql.Prepared-Statement, and java.sql.ResultSet的實(shí)現(xiàn)。假如目標(biāo)DBMS提供有OUT參數(shù)的內(nèi)嵌過(guò)程,那么還必須提供java.sql.CallableStatement 接口。

每個(gè)database driver必須提供一個(gè)類:java.sql.Driver以使得系統(tǒng)可以由java.sql.DriverManager來(lái)治理。

一個(gè)顯然的driver是在ODBC之上提供對(duì)JDBC的實(shí)現(xiàn),從而提供與ODBC接口的JDBC-ODBC 橋,就象前面的圖所顯示的.由于JDBC放在ODBC之后,所以實(shí)現(xiàn)起來(lái)簡(jiǎn)單而且高效。另外一個(gè)有用的驅(qū)動(dòng)直接接觸數(shù)據(jù)庫(kù)無(wú)關(guān)的網(wǎng)絡(luò)協(xié)議。發(fā)布一個(gè)協(xié)議答應(yīng)多個(gè)服務(wù)器實(shí)現(xiàn)的方法,例如在ODBC或者特定的DBMS上(盡管已經(jīng)有了一些使用固定協(xié)議的產(chǎn)品,但是我們不打算對(duì)它們實(shí)現(xiàn)標(biāo)準(zhǔn)化。),是可取的。


4. JDBC使用場(chǎng)合

Before looking at specifics of the JDBC API, an understanding of typical use scenarios is help-ful. There are two common scenarios that must be treated differently for our purposes: applets and applications.

在看JDBC API之前了解一下典型的使用場(chǎng)合是有幫助的。通常有兩種情形必須分別對(duì)待:applet和application.

4.1. Applet

目前Java使用的最多的從網(wǎng)絡(luò)中下載的applet,它們作為web文件的一個(gè)部分。當(dāng)中有數(shù)據(jù)庫(kù)存取applet和能夠使用JDBC來(lái)接觸數(shù)據(jù)庫(kù)的applet。

例如,一個(gè)用戶可能下載一個(gè)顯示股票歷史價(jià)格圖的applet。這個(gè)applet通過(guò)internet來(lái)從關(guān)系數(shù)據(jù)庫(kù)中獲得股票歷史價(jià)格。最一般的情況里面,對(duì)applet的使用是通過(guò)不可靠的邊界的。例如從另外一個(gè)公司或者Internet上獲得這些applet。于是稱這個(gè)情況為"Internet"場(chǎng)合。然而applet也可能通過(guò)局域網(wǎng)下載。在這個(gè)情況里面,客戶機(jī)的安全都還是一個(gè)問(wèn)題。

典型的applet在幾個(gè)方面與傳統(tǒng)的數(shù)據(jù)庫(kù)應(yīng)用程序有所不同:

1. 不可靠的applet被嚴(yán)格地限制在他們被答應(yīng)執(zhí)行的的操作上。非凡地,不答應(yīng)他們存取本地的文件,切不答應(yīng)他們對(duì)任意的數(shù)據(jù)庫(kù)建立網(wǎng)絡(luò)連接。

2. 就標(biāo)識(shí)和連接網(wǎng)上數(shù)據(jù)庫(kù)來(lái)說(shuō),Internet環(huán)境里面的applet面臨新的問(wèn)題。

3. 當(dāng)數(shù)據(jù)庫(kù)可能與你相隔萬(wàn)里的時(shí)候,效率的考慮也有所不同了。與局域網(wǎng)相比,Internet上數(shù)據(jù)庫(kù)applet可能會(huì)碰到十分不同的反應(yīng)時(shí)間。

4.2. Application

Java也可以用來(lái)建立普通的應(yīng)用,從而想一般的應(yīng)用一樣在客戶機(jī)上使用。我們相信隨著開(kāi)發(fā)工具越來(lái)越多,人們開(kāi)始熟悉到提高程序生產(chǎn)效率的必要性,以及Java的其他優(yōu)點(diǎn),Java的這種用法將越來(lái)越流行。在這種方式里面,Java的代碼是可以信賴的,且被答應(yīng)讀寫文件打開(kāi)網(wǎng)絡(luò)連接等等,就想其他的應(yīng)用程序代碼一樣。

也許這些Java應(yīng)用使用的最多的是在一個(gè)公司內(nèi)部或者在Intranet上,所以不妨成為Intranet場(chǎng)合。例如一個(gè)公司希望利用Java及其GUI構(gòu)件工具來(lái)建立他的基于合作數(shù)據(jù)模式的合作軟件。這些應(yīng)用程序?qū)⒋嫒【钟蚓W(wǎng)或者廣域網(wǎng)的數(shù)據(jù)。Java應(yīng)用可以作到這些。

Java應(yīng)用程序場(chǎng)合和Intranet場(chǎng)合與applet場(chǎng)合有諸多不同。例如標(biāo)定一個(gè)數(shù)據(jù)庫(kù)最自然的方式是用一個(gè)數(shù)據(jù)庫(kù)的名字,就象"Customers" 和"Personnel"這樣。然后用戶希望系統(tǒng)能夠定位具體的機(jī)器,DBMS,JDBC driver,和Java應(yīng)用程序。

4.3. 其他場(chǎng)合

還有其他一些有趣的場(chǎng)合:

1. 已驗(yàn)證的applet(Trusted applets)是指那些已經(jīng)被Java虛擬機(jī)器認(rèn)定是可以信賴的applet。他們之所以被認(rèn)為是可信的是因?yàn)樗麄円呀?jīng)對(duì)上了特定的密匙,或者用戶認(rèn)為從特定來(lái)源來(lái)的applet是可信的。在安全的方面上他們與應(yīng)用(appliction)相同,但是其他方面(例如定位一個(gè)數(shù)據(jù)庫(kù))與則與applet相似。

2. 與直接從Java GUI出發(fā)用客戶/服務(wù)器模式來(lái)度曲DBMS服務(wù)器不同,三層存取方式可能被使用。在這個(gè)場(chǎng)合里面,Java應(yīng)用程序?qū)χ虚g層的服務(wù)發(fā)出調(diào)用,中間層的服務(wù)在網(wǎng)上,它又再去調(diào)用數(shù)據(jù)庫(kù)。這些調(diào)用可能通過(guò)RPC (remote procedure call)或者ORB (object requestbroker )。在這兩種場(chǎng)合里面,中間層最好使用一個(gè)對(duì)象變化。我們希望三層結(jié)構(gòu)會(huì)變得越來(lái)越普遍,因?yàn)閷?duì)于MIS治理者來(lái)說(shuō),這可以使得他們有機(jī)會(huì)在公共數(shù)據(jù)庫(kù)上顯式地定義合法操作等。同時(shí)三層結(jié)構(gòu)可以提供許多效率上的好處。

目前中間層一般用C或者C 這樣的語(yǔ)言來(lái)完成。通過(guò)優(yōu)化編譯器把把Java 字節(jié)代碼翻譯成為高效的機(jī)器代碼,中間層也可以用Java來(lái)實(shí)現(xiàn)。Java有許多優(yōu)良特性(健壯性,安全性,多線程)可以達(dá)到中間層需要達(dá)到的目的。

5. 安全性考慮

作為網(wǎng)絡(luò)上的語(yǔ)言JAVA必須十分注安全性的考慮。基于上面的討論,JDBC的兩種主要使用場(chǎng)合里面,我們必須考慮安全性問(wèn)題:

在Java applications的場(chǎng)合里面Java代碼是本地的,所以也是"trusted",沒(méi)有驗(yàn)證的Java applet代碼不可以存取本地的以及其他網(wǎng)絡(luò)的數(shù)據(jù)。

5.1. JDBC 和未驗(yàn)證的applet

JDBC首先必須符合JAVA的一般安全規(guī)則。另外:

JDBC 必須認(rèn)為沒(méi)有驗(yàn)證的applets是不可靠的。l JDBC 不可以讓不可靠的applets存取本地?cái)?shù)據(jù)庫(kù)。

一個(gè)已經(jīng)向JDBC DriverManager注冊(cè)的是JDBC Driver只能存取它所來(lái)的數(shù)據(jù)源。

一個(gè)applet也只能向它所Download來(lái)的服務(wù)器來(lái)存取數(shù)據(jù)。

假如JDBC驅(qū)動(dòng)層假如完全確信對(duì)一個(gè)數(shù)據(jù)庫(kù)服務(wù)器打開(kāi)連接不會(huì)引起認(rèn)證或者權(quán)限問(wèn)題(可能由網(wǎng)上隨機(jī)主機(jī)上運(yùn)行的程序引起),那么它就答應(yīng)applet打開(kāi)這樣的連接。數(shù)據(jù)庫(kù)服務(wù)器不通過(guò)ip地址來(lái)限制存取是相當(dāng)少的,主要是為了舉例。(當(dāng)心,這一段話我可能翻譯反了?。。〈蠹铱纯丛?。)這些限制是相當(dāng)煩瑣的。不過(guò)他們與對(duì)一般applet的限制是一致的我們沒(méi)有必要放開(kāi)這些限制。

5.2. JDBC 和Java應(yīng)用程序

對(duì)于一個(gè)普通的Java應(yīng)用程序(例如全部用Java代碼而不是不可靠的applet )JDBC將從本地的類路徑里面獲得驅(qū)動(dòng),并且答應(yīng)應(yīng)用程序自由存取文件,遠(yuǎn)程服務(wù)器等等。但是和applet一樣,假如由于某些原因一個(gè)沒(méi)有驗(yàn)證的sun.sql.Driver類從遠(yuǎn)程的來(lái)源里面獲得,那么這個(gè)驅(qū)動(dòng)只能和相同地方來(lái)的代碼配合。

5.3. Driver的安全責(zé)任

JDBC driver可能在各種情況下使用,所以驅(qū)動(dòng)的編制者遵循一定的簡(jiǎn)單的安全規(guī)則,從而避免applet做非法的數(shù)據(jù)庫(kù)連接。假如所有的驅(qū)動(dòng)都象applet一樣從網(wǎng)上下載,那么這些原則將是不必要的,因?yàn)槠胀ǖ陌踩?guī)則已經(jīng)對(duì)它做了限制。但是驅(qū)動(dòng)的編寫者必須記住一旦他們的驅(qū)動(dòng)獲得成功,用戶將在本地磁盤安裝這些驅(qū)動(dòng),那么驅(qū)動(dòng)將成為Java環(huán)境中一個(gè)被信任的部分,所以必須確信它不會(huì)被來(lái)訪的applet所濫用。所以我們鼓勵(lì)所有的驅(qū)動(dòng)編寫者必須遵循一定安全原則。
所有這些原則都是在連接打開(kāi)的時(shí)候使用。這正式驅(qū)動(dòng)和虛擬機(jī)器檢查當(dāng)前調(diào)用者是否真的可以與指定的數(shù)據(jù)庫(kù)連接的時(shí)刻。一旦連接建立就不必做更多的檢查了。

5.3.1. 分享TCP/IP連接的時(shí)候必須謹(jǐn)慎

假如一個(gè)JDBC驅(qū)動(dòng)試圖打開(kāi)一個(gè) TCP 連接,那么這個(gè)打開(kāi)會(huì)被Java 安全治理機(jī)制自動(dòng)檢查。這個(gè)機(jī)構(gòu)會(huì)檢查當(dāng)前調(diào)用棧里面有沒(méi)有applet,假如有那么就限定它可以訪問(wèn)的機(jī)器集合。所以一般地JDBC驅(qū)動(dòng)可以把TCP建立檢查留給Java虛擬機(jī)。但是假如一個(gè)JDBC驅(qū)動(dòng)試圖在多個(gè)數(shù)據(jù)庫(kù)連接之間共享一個(gè)TCP連接,那么驅(qū)動(dòng)就必須自己負(fù)責(zé)檢查每個(gè)調(diào)用者是否真的被答應(yīng)與目標(biāo)數(shù)據(jù)庫(kù)聯(lián)系。例如假如我們?yōu)閍pplet A打開(kāi)了一個(gè)通往機(jī)器foobah 的TCP連接,這并不意味著applet B被自動(dòng)答應(yīng)來(lái)共享這個(gè)連接。applet B可能沒(méi)有任何訪問(wèn)機(jī)器foobah的權(quán)力。所以在答應(yīng)某個(gè)程序重用一個(gè)現(xiàn)成的TCP連接之前,JDBC 驅(qū)動(dòng)必須通過(guò)安全機(jī)構(gòu)來(lái)檢查當(dāng)前的的調(diào)用者是否可以訪問(wèn)這個(gè)連接。通過(guò)下面的代碼可是實(shí)現(xiàn)這個(gè)功能。

SecurityManager security = System.getSecurityManager();
if (security != null)
{
security.checkConnect(hostName, portNumber);
}

假如連接是不答應(yīng)的,那么Security.checkConnect方法將產(chǎn)生一個(gè)java.lang.SecurityException。

5.3.2. 檢查所有的本地文件訪問(wèn)

假如一個(gè)JDBC取得需要訪問(wèn)本地機(jī)器上的數(shù)據(jù),那么他必須確信調(diào)用者是被答應(yīng)打開(kāi)這個(gè)文件的。例如:
SecurityManager security = System.getSecurityManager();
if (security != null)
{
security.checkRead(fileName);
}
假如對(duì)特定文件的訪問(wèn)是不答應(yīng)的,那么Security.checkRead方法將產(chǎn)生一個(gè)java.lang.SecurityException。

5.3.3. 作好最壞的預(yù)備

一些驅(qū)動(dòng)可能使用本地的方法來(lái)橋接底層數(shù)據(jù)庫(kù)程序。則這些情況里面判定那些本地文件將被底層函數(shù)所訪問(wèn)是困難的。在這些環(huán)境里面用戶必須作好最壞的打算,并且否決所有下載applet所發(fā)出的數(shù)據(jù)庫(kù)存取,除非驅(qū)動(dòng)可能完全確信將要做存取是沒(méi)有問(wèn)題的。
例如一個(gè)JDBC-ODBC橋接器必須檢查ODBC數(shù)據(jù)源的的名稱,確保applet只可以訪問(wèn)它的“生源地”。假如對(duì)有的名字中不能判定出數(shù)據(jù)源的主機(jī)名,那么只能否決這個(gè)訪問(wèn)。為了決定一個(gè)當(dāng)前的調(diào)用者是可以信賴的應(yīng)用還是一個(gè)applet,JDBC驅(qū)動(dòng)必須能夠檢查這個(gè)調(diào)用者是否可以寫一個(gè)隨機(jī)的文件:
SecurityManager security = System.getSecurityManager();
if (security != null)
{
security.checkWrite("foobaz");
I. }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
www.国产自拍| 爱情岛论坛亚洲品质自拍视频网站| 国产肉丝袜一区二区| 色涩视频在线观看| 九九热免费精品视频| 最近中文字幕mv免费高清电影| 国产精品嫩草在线观看| 久久人人超碰| 欧美日韩一区二区三区免费看| 日韩一级在线播放| 日韩中文字幕在线免费观看| 国产伦精品一区二区三区免费| 久久久久久免费毛片精品| 91香蕉国产线在线观看| 久久久综合九色合综国产精品| 国内免费精品永久在线视频| 精品国产精品一区二区夜夜嗨| 精品久久不卡| 隣の若妻さん波多野结衣| 成人性爱视频在线观看| 国产 日韩 欧美 综合| 亚洲av成人无码久久精品| 51免费午夜啪啪| 日本一本草久p| 母乳一区在线观看| 超碰aⅴ人人做人人爽欧美| 国产视频综合在线| 亚洲ab电影| 亚洲欧美电影院| 成人av小说网| 一区二区三区四区中文字幕| 国产a级片视频| 亚洲精品久久久久久下一站| 日本一区二区在线免费播放| 午夜精品区一区二区三| 国产主播自拍av| 91精选福利| 成人无码www在线看免费| 国产网红女主播精品视频| 婷婷伊人五月天| 国产一区二区四区| 久久久久久国产精品久久| 精品久久av| 最近更新的2019中文字幕| 国产欧洲精品视频| 99精品国产99久久久久久福利| 色爱综合区网| 亚洲国产一区自拍| 国产激情久久久久久熟女老人av| 国产欧美日韩精品在线观看| 青草青草久热精品视频在线观看| 亚洲福利一区二区| 亚洲人做受高潮| 一区二区三区日本久久久| 色偷偷亚洲第一综合| 四虎4hu新地址入口2023| 久久精品一卡二卡| gogogo高清免费观看在线视频| 黄视频在线免费看| 国产一区二区三区观看| 91视频免费版污| 成人精品在线播放| 97色伦亚洲国产| 久久综合狠狠综合久久激情| 亚洲女人毛片| 亚洲免费观看高清在线观看| 国产精品日韩一区| 性色一区二区三区| 26uuu精品一区二区三区四区在线| 日韩久久精品一区| 久青草视频在线观看| 中文字幕乱码中文乱码51精品| av电影在线播放| 一个人看的免费视频色| 91av在线视频观看| 欧美极度另类videos高清| 国产精品视频一区二区三| 牛牛电影国产一区二区| 人人插人人干| 亚洲成人福利| 天堂入口网站| 久久久久亚洲AV成人无在| 日韩免费视频线观看| 久久精品人妻一区二区三区| 在线观看免费p片视频网站地址| 你懂的在线观看网站| 久久国产精品一区| 五月婷婷另类国产| 欧美精品一区二区三区很污很色的| 成人自拍在线| 99久久久国产精品免费蜜臀| 佐山爱在线视频| 印度午夜性春猛xxx交| 国产国语videosex另类| 中文字幕亚洲综合久久菠萝蜜| 台湾av在线二三区观看| 国产三区在线观看| 久久久久久久久影院| 91久久精品国产91久久性色| 国产高清不卡无码视频| 精品一区二区无码| 亚洲综合成人婷婷小说| 国产美女无遮挡网站| 伊大人久久香线焦宗合一75大| 另类视频在线| 日韩国产成人精品| 精品亚洲综合| 717成人午夜免费福利电影| 91p九色成人| 羞羞的视频在线| 在线观看免费国产视频| 精品一区二区三区影院在线午夜| 国产香蕉精品| 思思久久99热只有频精品66| 四虎成人精品免费影院| 日本h片在线看| 视频一区二区视频| 91精品国产乱码久久| 欧美日韩小视频| 亚洲精品乱码久久久久久9色| 国内福利写真片视频在线| 久99久精品视频免费观看| 欧美13videosex性极品| 欧美大奶子在线| 97人妻精品一区二区三区动漫| 日本高清好狼色视频| 欧美二区三区| 女同久久另类99精品国产| 精品无码国模私拍视频| 在线欧美日韩精品| 国产一区精品| 成人免费在线视频观看| 国产精品视频你懂的| 精品动漫3d一区二区三区免费| 日韩小视频在线| 天天做天天摸天天爽国产一区| 又长又粗又大又爽| 在线观看精品一区| 麻豆免费看一区二区三区| 不用播放器的免费av| 69堂免费精品视频在线播放| 欧美日韩在线免费观看视频| 国产美女主播在线观看| 亚洲色图欧洲色图| 妓院一钑片免看黄大片| 亚洲欧美综合另类中字| 日韩av不卡在线播放| 杨钰莹一级淫片aaaaaa播放| www.亚洲| 午夜日韩在线观看| 亚洲欧美福利视频| 天堂网av在线播放| 国产情侣在线视频| 国产精品yjizz| 国模极品一区二区三区| 久久这里只有精品一区二区| 国产精品亚洲第一区在线暖暖韩国| 狠狠躁夜夜躁人人爽天天天天97| 天堂中文av| 日韩暖暖在线视频| 国产成人精品福利| 成人毛片在线免费观看| 国产黄色精品视频| av免费在线播放网站| 香蕉综合视频| 欧美男人操女人视频| 污视频网站免费看| 久久国内精品| 国产亚洲女人久久久久毛片| 欧美成人精品激情在线视频| 91ts人妖另类精品系列| 国产亚洲第一区| 色黄视频在线| 日韩精品丝袜美腿| 亚洲国产一二三精品无码| 黄av在线免费观看| 久久一区91| 国产成人va亚洲电影| 最新国产在线精品91尤物| jizzjizz亚洲中国少妇| 女女同性女同一区二区三区91| 亚洲欧美日本一区| 亚洲欧洲成人av每日更新| 久久精品午夜一区二区福利| 国产午夜一区二区三区| 欧美伊人久久大香线蕉综合69| 亚洲偷熟乱区亚洲香蕉av| 亚洲精品日韩在线观看| www.久久草| 国产大片免费看| 伊人精品成人久久综合软件| 高清无码一区二区在线观看吞精| 日日天天久久| 国产一区视频在线播放| 国产理论电影在线观看| 蜜臀久久99精品久久久久宅男| 亚洲黄色精品视频| 亚洲成人激情社区| 欧洲激情综合| 欧美日韩视频不卡| 午夜精品aaa| 亚洲s色大片| 麻豆一区二区三区| www.com亚洲| 91av看片| 久久久在线观看| 黄污视频在线看| 最新精品国偷自产在线| jizzjizz少妇亚洲水多| 国产午夜亚洲精品不卡| 久久五月天色综合| 二区三区在线视频| 日韩av电影在线免费播放| 播放灌醉水嫩大学生国内精品| 青青草综合在线| 99视频精品全国免费| 成人日韩在线电影| 国产女精品视频网站免费| 欧美另类色图| 亚洲女性喷水在线观看一区| 丝袜国产日韩另类美女| 中文字幕这里只有精品| 日本免费看黄| 欧美办公室脚交xxxx| 99视频精品免费观看| 成人免费在线观看视频网站| 欧美日韩性生活视频| 成人免费在线视频网| 日韩欧美精品在线观看| 91蜜臀精品国产自偷在线| 国产精一区二区| 国产精品国产一区二区| 亚洲成人777777| 高清电影在线观看免费| 成人免费av在线| 欧美xxxxhdvideosex| 日本免费a视频| 久久乐国产精品| 无码人妻久久一区二区三区| 99视频精品视频高清免费| 亚洲精品成人无码毛片| 久久久久久亚洲av无码专区| 亚洲视频电影图片偷拍一区| 麻豆网站在线看| 亚洲一区二区国产| 久久人妻无码一区二区| 一区二区日韩在线观看| yourporn在线观看中文站| 免费看成年人视频在线观看| 国产精品91久久久| 成人同人动漫免费观看| 韩国欧美一区二区| 国产在线视频不卡| 国产日韩在线一区二区三区| 日本中文字幕在线视频| 成品网站w灬+源码1688网页| 插我舔内射18免费视频| 日韩免费视频在线观看| 久久综合九色综合88i| 国产精品二区在线观看| 国产成人午夜电影网| 国产视频亚洲色图| 国产精品丝袜黑色高跟| 亚洲不卡的av| av免费观看一区二区| 九色91在线| 久视频在线观看| 四虎精品一区二区三区| 欧美成人女星排行榜| 白白色在线观看| ww亚洲ww在线观看国产| 影音先锋2020色资源网| 日本一二三区视频| 永久免费无码av网站在线观看| 在线伊人免费视频| 成人欧美一区二区三区视频xxx| 婷婷久久五月天| 亚洲激情校园春色| 亚洲色图欧美另类| 最新亚洲国产| 日韩欧美中文在线观看| 日韩午夜中文字幕| www亚洲成人| 国产日韩一区二区三区在线| 久久久久麻豆v国产| 希岛爱理一区二区三区av高清| 97视频网站入口| 日本成人精品视频| 理论片在线不卡免费观看| 国产成人无码精品久久二区三| 日本韩国精品一区二区| 亚洲国产精品精华液ab| 日本中文在线一区| 在线国产一区| 欧美日韩一区在线视频| 国产私人尤物无码不卡| 亚洲一级网站| 亚洲区一区二| 欧美性猛交xx乱大交| 国产欧美精品一区二区三区| 欧美日韩一级片网站| 麻豆视频在线播放| 午夜理伦三级做爰电影| 欧美 亚洲 视频| 国产精品自拍亚洲| 九九久久婷婷| 91久久大香伊蕉在人线| 成人午夜免费视频| 成人av在线资源网| 老熟妇一区二区三区啪啪| 国产精品成人99一区无码| 污片在线观看一区二区| av在线播放一区二区三区| 少妇高潮一区二区三区| 奇米888一区二区三区| 亚洲成av在线| 蜜乳av一区| 亚洲a视频在线| 免费观看一级欧美片| 欧美日韩一区精品| 国产色一区二区| 午夜在线a亚洲v天堂网2018| 亚洲第一网站在线观看| 免费黄色网页在线观看| 日韩三区视频| 欧美大肥婆大肥bbbbb| 精品在线一区| 日本成人手机在线|