JDBC(一)獲取數據庫連接

一、數據持久化

持久化(persistence):把數據保存到可掉電式存儲設備中以供之后使用挡爵。大多數情況下,特別是企業(yè)級應用,數據持久化意味著將內存中的數據保存到硬盤上加以”固化”蜜托,而持久化的實現過程大多通過各種關系數據庫來完成。

持久化的主要應用是將內存中的數據存儲在關系型數據庫中霉赡,當然也可以存儲在磁盤文件橄务、XML數據文件中。

二穴亏、Java 中的數據存儲技術

在Java中蜂挪,數據庫存取技術可分為如下幾類:

(1)JDBC直接訪問數據庫

(2)JDO技術

(3)第三方O/R工具,如Hibernate迫肖、mybatis 等

JDBC是java訪問數據庫的基石锅劝,JDO攒驰、Hibernate蟆湖、mybatis?等只是更好的封裝了JDBC。

三玻粪、JDBC基礎

JDBC(Java Database Connectivity)是一個獨立于特定數據庫管理系統隅津、通用的SQL數據庫存取和操作的公共接口(一組API),定義了用來訪問數據庫的標準Java類庫劲室,使用這個類庫可以以一種標準的方法伦仍、方便地訪問數據庫資源

JDBC為訪問不同的數據庫提供了一種統一的途徑,為開發(fā)者屏蔽了一些細節(jié)問題很洋。

JDBC的目標是使Java程序員使用JDBC可以連接任何提供了JDBC驅動程序的數據庫系統充蓝,這樣就使得程序員無需對特定的數據庫系統的特點有過多的了解,從而大大簡化和加快了開發(fā)過程。

四谓苟、JDBC體系結構

JDBC接口(API)包括兩個層次:

面向應用的API:Java API官脓,抽象接口,供應用程序開發(fā)人員使用(連接數據庫涝焙,執(zhí)行SQL語句卑笨,獲得結果)。

面向數據庫的API:Java Driver API仑撞,供開發(fā)商開發(fā)數據庫驅動程序用赤兴。

五、JDBC驅動程序分類

(1)JDBC驅動程序:各個數據庫廠商根據JDBC的規(guī)范制作的 JDBC 實現類的類庫

(2)JDBC驅動程序總共有四種類型:

第一類:JDBC-ODBC橋隧哮。

第二類:部分本地API部分Java的驅動程序桶良。

第三類:JDBC網絡純Java驅動程序。

第四類:本地協議的純 Java 驅動程序沮翔。

第三艺普、四兩類都是純Java的驅動程序,因此鉴竭,對于Java開發(fā)者來說歧譬,它們在性能、可移植性搏存、功能等方面都有優(yōu)勢瑰步。

(3)ODBC

早期對數據庫的訪問,都是調用數據庫廠商提供的專有的 API璧眠。為了在 Windows 平臺下提供統一的訪問方式缩焦,微軟推出了 ODBC(Open Database Connectivity,開放式數據庫連接)责静,并提供了 ODBC API袁滥,使用者在程序中只需要調用 ODBC API,由 ODBC 驅動程序將調用轉換成為對特定的數據庫的調用請求

一個基于ODBC的應用程序對數據庫的操作不依賴任何DBMS(database manager system)灾螃,不直接與DBMS打交道题翻,所有的數據庫操作由對應的DBMS的ODBC驅動程序完成。也就是說腰鬼,不論是FoxPro嵌赠、Access , MYSQL還是Oracle數據庫,均可用ODBC API進行訪問熄赡。由此可見姜挺,ODBC的最大優(yōu)點是能以統一的方式處理所有的數據庫。

(4)JDBC-ODBC橋

JDBC-ODBC 橋本身也是一個驅動彼硫,利用這個驅動炊豪,可以使用 JDBC-API 通過ODBC 去訪問數據庫凌箕。這種機制實際上是把標準的 JDBC 調用轉換成相應的 ODBC 調用,并通過 ODBC 訪問數據庫

因為需要通過多層調用词渤,所以利用 JDBC-ODBC 橋訪問數據庫的效率較低

在 JDK 中陌知,提供了 JDBC-ODBC 橋的實現類(sun.jdbc.odbc.JdbcOdbcDriver)

(5)部分本地API部分Java的驅動程序

這種類型的 JDBC 驅動程序使用 Java 編寫,它調用數據庫廠商提供的本地 API

通過這種類型的 JDBC 驅動程序訪問數據庫減少了 ODBC 的調用環(huán)節(jié)掖肋,提高了數據庫訪問的效率

在這種方式下需要在客戶的機器上安裝本地 JDBC 驅動程序和特定廠商的本地 API

(6)JDBC網絡純Java驅動程序

這種驅動利用中間件的應用服務器來訪問數據庫仆葡。應用服務器作為一個到多個數據庫的網關,客戶端通過它可以連接到不同的數據庫服務器志笼。

應用服務器通常有自己的網絡協議沿盅,Java 用戶程序通過 JDBC 驅動程序將 JDBC 調用發(fā)送給應用服務器,應用服務器使用本地程序驅動訪問數據庫纫溃,從而完成請求腰涧。

(7)本地協議的純 Java 驅動程序

多數數據庫廠商已經支持允許客戶程序通過網絡直接與數據庫通信的網絡協議。

這種類型的驅動程序完全使用 Java 編寫紊浩,通過與數據庫建立的 Socket 連接窖铡,采用具體與廠商的網絡協議把 JDBC 調用轉換為直接連接的網絡調用。

六坊谁、JDBC API

JDBC API 是一系列的接口费彼,它使得應用程序能夠進行數據庫聯接,執(zhí)行SQL語句口芍,并且得到返回結果箍铲。

七、Driver 接口

Java.sql.Driver 接口是所有 JDBC 驅動程序需要實現的接口鬓椭。這個接口是提供給數據庫廠商使用的颠猴,不同數據庫廠商提供不同的實現

在程序中不需要直接去訪問實現了 Driver 接口的類,而是由驅動程序管理器類(java.sql.DriverManager)去調用這些Driver實現

八小染、加載與注冊 JDBC 驅動

加載 JDBC 驅動需調用 Class 類的靜態(tài)方法 forName()翘瓮,向其傳遞要加載的 JDBC 驅動的類名;

DriverManager 類是驅動程序管理器類裤翩,負責管理驅動程序资盅;

通常不用顯式調用 DriverManager 類的 registerDriver() 方法來注冊驅動程序類的實例,因為 Driver 接口的驅動程序類都包含了靜態(tài)代碼塊岛都,在這個靜態(tài)代碼塊中律姨,會調用 DriverManager.registerDriver() 方法來注冊自身的一個實例振峻。

九臼疫、建立連接

(1)可以調用 DriverManager 類的 getConnection() 方法建立到數據庫的連接

(2)JDBC URL 用于標識一個被注冊的驅動程序,驅動程序管理器通過這個 URL 選擇正確的驅動程序扣孟,從而建立到數據庫的連接烫堤。

(3)JDBC URL的標準由三部分組成,各部分間用冒號分隔:

jdbc:<子協議>:<子名稱>

協議:JDBC URL中的協議總是jdbc

子協議:子協議用于標識一個數據庫驅動程序

子名稱:一種標識數據庫的方法。子名稱可以依不同的子協議而變化鸽斟,用子名稱的目的是為了定位數據庫提供足夠的信息

十拔创、幾種常用數據庫的JDBC URL

對于 Oracle 數據庫連接,采用如下形式:

jdbc:oracle:thin:@localhost:1521:sid

對于 SQLServer 數據庫連接富蓄,采用如下形式:

jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid

對于 MYSQL 數據庫連接剩燥,采用如下形式:?

jdbc:mysql://localhost:3306/sid

十一、案例

(1)測試連接

(2)編寫一個通用的方法立倍,通過修改配置文件的方式實現和具體的數據庫解耦灭红。

其中屬性文件對應Java中的Properties類,使用類加載器加載bin目錄下(類路徑下)的文件

十二口注、通過DriverManager獲取數據庫連接

DriverManager是驅動管理類:

(1)可以通過重載的getConnection()方法獲取數據庫連接变擒,較為方便;

(2)可以同時管理多個驅動程序:若注冊了多個數據庫連接寝志,則調用getConnection()方法時傳入的參數不同娇斑,即返回不同的數據庫連接。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末材部,一起剝皮案震驚了整個濱河市毫缆,隨后出現的幾起案子,更是在濱河造成了極大的恐慌乐导,老刑警劉巖悔醋,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異兽叮,居然都是意外死亡芬骄,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門鹦聪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來账阻,“玉大人,你說我怎么就攤上這事泽本√蕴” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵规丽,是天一觀的道長蒲牧。 經常有香客問我,道長赌莺,這世上最難降的妖魔是什么冰抢? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮艘狭,結果婚禮上挎扰,老公的妹妹穿的比我還像新娘翠订。我一直安慰自己,他們只是感情好遵倦,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布尽超。 她就那樣靜靜地躺著,像睡著了一般梧躺。 火紅的嫁衣襯著肌膚如雪似谁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天掠哥,我揣著相機與錄音棘脐,去河邊找鬼。 笑死龙致,一個胖子當著我的面吹牛蛀缝,可吹牛的內容都是我干的。 我是一名探鬼主播目代,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼屈梁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了榛了?” 一聲冷哼從身側響起在讶,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霜大,沒想到半個月后构哺,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡战坤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年曙强,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片途茫。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡碟嘴,死狀恐怖,靈堂內的尸體忽然破棺而出囊卜,到底是詐尸還是另有隱情娜扇,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布栅组,位于F島的核電站雀瓢,受9級特大地震影響,放射性物質發(fā)生泄漏玉掸。R本人自食惡果不足惜刃麸,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望排截。 院中可真熱鬧嫌蚤,春花似錦辐益、人聲如沸断傲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽认罩。三九已至箱蝠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垦垂,已是汗流浹背宦搬。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劫拗,地道東北人间校。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像页慷,于是被迫代替她去往敵國和親憔足。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容