通過(guò)JNDI使用數(shù)據(jù)源

通過(guò)JNDI使用數(shù)據(jù)源

ID:42662017

大小:54.50 KB

頁(yè)數(shù):7頁(yè)

時(shí)間:2019-09-19

通過(guò)JNDI使用數(shù)據(jù)源_第1頁(yè)
通過(guò)JNDI使用數(shù)據(jù)源_第2頁(yè)
通過(guò)JNDI使用數(shù)據(jù)源_第3頁(yè)
通過(guò)JNDI使用數(shù)據(jù)源_第4頁(yè)
通過(guò)JNDI使用數(shù)據(jù)源_第5頁(yè)
資源描述:

《通過(guò)JNDI使用數(shù)據(jù)源》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、簡(jiǎn)介眾所周知,JDBC(Java數(shù)據(jù)庫(kù)連接)是Java2企業(yè)版的重要組成部分。它是基于SQL層的API。通過(guò)把SQL語(yǔ)句嵌入JDBC接口的方法中,用戶可以通過(guò)Java程序執(zhí)行幾乎所有的數(shù)據(jù)庫(kù)操作。JDBC只提供了接口,具體的類的實(shí)現(xiàn)要求數(shù)據(jù)庫(kù)的設(shè)計(jì)者完成。通過(guò)生成這些接口的實(shí)例,即使對(duì)于不同的數(shù)據(jù)庫(kù),Java程序也可以正確地執(zhí)行SQL調(diào)用。所以對(duì)于程序員來(lái)說(shuō),不必把注意力放在如何向數(shù)據(jù)庫(kù)發(fā)送SQL指令,因?yàn)槌绦騿T需要了解和用到的只是JDBC的接口,只有在極少數(shù)情況下會(huì)用到面向特定數(shù)據(jù)庫(kù)的類,例如程序員希望使用ORACLE的擴(kuò)展API。在JDBC程序中,首先需要

2、做的是實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。在示例程序中,我們使用的是ORACLE8i的JDBC包。連接數(shù)據(jù)庫(kù)通常需要實(shí)現(xiàn)以下幾個(gè)步驟:1.注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序(driver)??梢酝ㄟ^(guò)調(diào)用java.sql.DriverManager類的registerDriver方法顯式注冊(cè)驅(qū)動(dòng)程序,也可以通過(guò)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序類隱式注冊(cè)驅(qū)動(dòng)程序。例如我們希望向虛擬機(jī)注冊(cè)//顯式注冊(cè)DriverManager.registerDriver(neworacle.jdbc.driver.//隱式注冊(cè)Class.forName(“oracle.jdbc.driver.關(guān)于虛擬機(jī)如何自動(dòng)注冊(cè)通過(guò)類加載

3、器(ClassLoader)加載的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序超過(guò)了本文討論的范圍,在此不做詳細(xì)討論。2.建立連接。調(diào)用java.sql.DriverManager類的getConnection()方法可以建立與數(shù)據(jù)庫(kù)的連接。GetConnection()方法返回一個(gè)Connection對(duì)象。需要注意的是,getConnection()方法會(huì)自動(dòng)從數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序注冊(cè)表中選擇一個(gè)最合適的驅(qū)動(dòng)程序。3.建立連接后,允許自動(dòng)更新(AutoCommit)。調(diào)用java.sql.Connection接口的serAutoCommit()方法可以設(shè)定當(dāng)程序向數(shù)據(jù)庫(kù)發(fā)出一條SQL指令后,數(shù)

4、據(jù)庫(kù)是否立即更新。下面是一個(gè)具體的實(shí)例。在該實(shí)例中,作為getConnection()方法參數(shù)的url使用的是Net8keyword-valuepair格式。當(dāng)然也可以使用普通格式。數(shù)據(jù)庫(kù)安裝在名為Chicago的服務(wù)器上,使用的協(xié)議是TCP協(xié)議,使用的端口是1521,數(shù)據(jù)庫(kù)的SID是chidb,使用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序是importjava.sql.*;//初始化常數(shù)privatestaticStringurl=  “jdbc:oracle:thin:@(description=(address=(host=Chicago)”+  “(protocol=tcp)

5、(port=1521))(connect_data=(sid=chidb)))”;  //也可以設(shè)定url為“jdbc:oracle:thin:@Chicago:1521:chidb”  privatestaticStringusername=“guest”;privatestaticStringpassword=“guest”;try{  //注冊(cè)數(shù)據(jù)庫(kù)  Class.forName(“oracle.jdbc.driver.  //建立連接  Connectionconn=  DriverManager.getConnection(url,username,

6、password);//允許自動(dòng)更新Conn.setAutoCommit(true);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}從實(shí)際應(yīng)用的角度出發(fā),我們可以看出采取這種方式連接到數(shù)據(jù)庫(kù)存在幾個(gè)問(wèn)題。第一是安全性問(wèn)題,由于程序代碼中包含用戶名和密碼,其他人如果能得到bytecode,可以通過(guò)反編譯工具獲得用戶名和密碼。第二是代碼的可移植性問(wèn)題。如果希望連接的數(shù)據(jù)庫(kù)名稱或用戶名有所更改,程序員需要修改源程序,然后把修

7、改過(guò)的程序發(fā)送給用戶。也就是說(shuō),軟件無(wú)法脫離數(shù)據(jù)庫(kù)獨(dú)立存在。這樣不僅會(huì)大大提高軟件的成本,也不利于軟件本身的發(fā)展。還可能出現(xiàn)這樣的情況:在某些情況下,提供數(shù)據(jù)的機(jī)構(gòu)不希望數(shù)據(jù)庫(kù)的用戶名和密碼讓編寫程序的程序員知道知道。這樣就提出了一個(gè)問(wèn)題,如何使Java和數(shù)據(jù)庫(kù)之間建立連接時(shí)隱藏一些敏感的信息。數(shù)據(jù)源(DataSource)及JNDI數(shù)據(jù)源是在JDBC2.0中引入的一個(gè)概念。在JDBC2.0擴(kuò)展包中定義了javax.sql.DataSource接口來(lái)描述這個(gè)概念。如果用戶希望建立一個(gè)數(shù)據(jù)庫(kù)連接,通過(guò)查詢?cè)贘NDI服務(wù)中的數(shù)據(jù)源,可以從數(shù)據(jù)源中獲取相應(yīng)的數(shù)據(jù)庫(kù)連

8、接。這樣用戶就只需要提供一個(gè)邏輯名稱(

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。