国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

數(shù)據(jù)源在jdbc中的應(yīng)用(1)

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

  簡(jiǎn)介
  眾所周知,JDBC(java數(shù)據(jù)庫(kù)連接)是Java 2企業(yè)版的重要組成部分。它是基于SQL層的API。通過(guò)把SQL語(yǔ)句嵌入JDBC接口的方法中,用戶可以通過(guò)Java程序執(zhí)行幾乎所有的數(shù)據(jù)庫(kù)操作。JDBC只提供了接口,具體的類(lèi)的實(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ù)的類(lèi),例如程序員希望使用Oracle的擴(kuò)展API。
  在JDBC程序中,首先需要做的是實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。在示例程序中,我們使用的是OR ACLE8i的JDBC包。連接數(shù)據(jù)庫(kù)通常需要實(shí)現(xiàn)以下幾個(gè)步驟:
  1. 注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序(driver)。可以通過(guò)調(diào)用java.sql.DriverManager類(lèi)的regis
  terDriver方法顯式注冊(cè)驅(qū)動(dòng)程序,也可以通過(guò)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序類(lèi)隱式注冊(cè)驅(qū)動(dòng)程序
  。例如我們希望向虛擬機(jī)注冊(cè) // 顯式注冊(cè)
  DriverManager.registerDriver(new oracle.jdbc.driver.// 隱式注冊(cè)
  Class.forName(“oracle.jdbc.driver.
  關(guān)于虛擬機(jī)如何自動(dòng)注冊(cè)通過(guò)類(lèi)加載器(ClassLoader)加載的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序超過(guò)了本 文討論的范圍,在此不做具體討論。
  2. 建立連接。調(diào)用java.sql.DriverManager類(lèi)的getConnection()方法可以建立與數(shù) 據(jù)庫(kù)的連接。GetConnection()方法返回一個(gè)Connection對(duì)象。需要注重的是,getCo
  nnection()方法會(huì)自動(dòng)從數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序注冊(cè)表中選擇一個(gè)最合適的驅(qū)動(dòng)程序。
  3. 建立連接后,答應(yīng)自動(dòng)更新(AutoCommit)。調(diào)用java.sql.Connection接口的ser
  AutoCommit()方法可以設(shè)定當(dāng)程序向數(shù)據(jù)庫(kù)發(fā)出一條SQL指令后,數(shù)據(jù)庫(kù)是否立即更新 。
  下面是一個(gè)具體的實(shí)例。在該實(shí)例中,作為getConnection()方法參數(shù)的url使用的是
  Net8 keyWord-value pair格式。當(dāng)然也可以使用普通格式。數(shù)據(jù)庫(kù)安裝在名為Chicago
  的服務(wù)器上,使用的協(xié)議是TCP協(xié)議,使用的端口是1521,數(shù)據(jù)庫(kù)的SID是chidb,使用的
  數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序是 import java.sql.*;
  // 初始化常數(shù)
  PRivate static String url =
    “jdbcracle:thin:@(description=(address=(host=Chicago)” +
    “(protocol=tcp)(port=1521))(connect_data=(sid=chidb)))”;
    // 也可以設(shè)定url為“jdbcracle:thin:@ Chicago:1521:chidb”
    private static String username = “guest”;
  private static String password = “guest”;
  try
  {
    // 注冊(cè)數(shù)據(jù)庫(kù)
    Class.forName(“oracle.jdbc.driver.  // 建立連接
    Connection conn =
   DriverManager.getConnection(url, username, password);
  // 答應(yīng)自動(dòng)更新
  Conn.setAutoCommit(true);
  }
  catch(ClassNotFoundException e )
  {
  e.printStackTrace();
  }
  catch(SQLException e)
  {
  e.printStackTrace();
  }
  從實(shí)際應(yīng)用的角度出發(fā),我們可以看出采取這種方式連接到數(shù)據(jù)庫(kù)存在幾個(gè)問(wèn)題。第一 是安全性問(wèn)題,由于程序代碼中包含用戶名和密碼,其他人假如能得到bytecode,可以通過(guò)反編譯工具獲得用戶名和密碼。第二是代碼的可移植性問(wèn)題。假如希望連接的數(shù)據(jù)庫(kù)名稱(chēng)或用戶名有所更改,程序員需要修改源程序,然后把修改過(guò)的程序發(fā)送給用戶。
  也就是說(shuō),軟件無(wú)法脫離數(shù)據(jù)庫(kù)獨(dú)立存在。這樣不僅會(huì)大大提高軟件的成本,也不利于軟件本身的發(fā)展。還可能出現(xiàn)這樣的情況:在某些情況下,提供數(shù)據(jù)的機(jī)構(gòu)不希望數(shù)據(jù)庫(kù)的用戶名和密碼讓編寫(xiě)程序的程序員知道知道。這樣就提出了一個(gè)問(wèn)題,如何使Java和數(shù)據(jù)庫(kù)之間建立連接時(shí)隱藏一些敏感的信息。
  數(shù)據(jù)源(Data Source)及JNDI
  數(shù)據(jù)源是在JDBC 2.0中引入的一個(gè)概念。在JDBC 2.0擴(kuò)展包中定義了javax.sql.DataSo
  urce接口來(lái)描述這個(gè)概念。假如用戶希望建立一個(gè)數(shù)據(jù)庫(kù)連接,通過(guò)查詢?cè)贘NDI服務(wù)中的數(shù)據(jù)源,可以從數(shù)據(jù)源中獲取相應(yīng)的數(shù)據(jù)庫(kù)連接。這樣用戶就只需要提供一個(gè)邏輯名稱(chēng)(Logic Name),而不是數(shù)據(jù)庫(kù)登錄的具體細(xì)節(jié)。
  在這里有必要簡(jiǎn)單介紹一下JNDI。JNDI的全稱(chēng)是Java Naming and Directory Interface, 可以理解為Java名稱(chēng)和目錄服務(wù)接口。JNDI向應(yīng)用程序提供了一個(gè)查詢和使用遠(yuǎn)程 服務(wù)的機(jī)制。這些服務(wù)可以是任何企業(yè)服務(wù)。對(duì)于JDBC應(yīng)用程序來(lái)說(shuō),JNDI提供的是數(shù) 據(jù)庫(kù)連接服務(wù)。當(dāng)然JNDI也可以向數(shù)據(jù)庫(kù)提供其他服務(wù),但是這超出了本文范圍,在此 不做論述。
  其實(shí)JNDI并不難理解。簡(jiǎn)單來(lái)說(shuō),名稱(chēng)服務(wù)提供了一個(gè)把文件,打印機(jī),服務(wù)器等實(shí)體 映射到一個(gè)邏輯名稱(chēng)的機(jī)制。例如在操作系統(tǒng)中的名稱(chēng)服務(wù)就把打印機(jī)映射到一個(gè)I/O端 口。而目錄服務(wù)可以理解為名稱(chēng)服務(wù)的一個(gè)擴(kuò)展,它答應(yīng)在服務(wù)中的各項(xiàng)擁有自己的屬 性。又以打印機(jī)為例,打印機(jī)可以是彩色打印機(jī),支持雙面打印,支持網(wǎng)絡(luò)打印,支持 高速打印等。所有這些打印機(jī)的屬性都可以儲(chǔ)存在目錄服務(wù)中,和相應(yīng)的打印機(jī)聯(lián)系起 來(lái)。一些常見(jiàn)的目錄服務(wù)有NIS,NIS+,LDAP和Novell的NDS等。
  JNDI使應(yīng)用程序通過(guò)使用邏輯名稱(chēng)獲取對(duì)象和對(duì)象提供的服務(wù),從而使程序員可以避免 使用與提供對(duì)象的機(jī)構(gòu)有關(guān)聯(lián)的代碼。例如在下面的例子中使用了在JNDI中的數(shù)據(jù)源,
  程序員就不需要提供

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 北安市| 修水县| 绥棱县| 崇文区| 河南省| 泽州县| 美姑县| 从化市| 天柱县| 乐山市| 莱州市| 神农架林区| 资溪县| 北宁市| 登封市| 乌鲁木齐县| 武乡县| 上高县| 木里| 调兵山市| 潜山县| 韶关市| 烟台市| 唐海县| 永宁县| 安平县| 长岛县| 射阳县| 宿松县| 静安区| 方山县| 香港| 十堰市| 永州市| 武山县| 扶余县| 中方县| 丹寨县| 安仁县| 九寨沟县| 云林县|