一、數據持久化
持久化(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()方法時傳入的參數不同娇斑,即返回不同的數據庫連接。