持久化(persistence):
把資料儲存到可掉電式儲存設備中以供之後使用。大多數情況下,特别是企業級應用,資料持久化意味着将記憶體中的資料儲存到硬碟上加以”固化”,而持久化的實作過程大多通過各種關系資料庫來完成。
持久化的主要應用是将記憶體中的資料存儲在關系型資料庫中,當然也可以存儲在磁盤檔案、XML資料檔案中。
在Java中,資料庫存取技術可分為如下幾類:
JDBC直接通路資料庫
JDO技術 第三方O/R工具,如Hibernate, ibatis 等
JDBC是java通路資料庫的基石,JDO, Hibernate等隻是更好的封裝了JDBC。
JDBC(Java Database Connectivity)是一個獨立于特定資料庫管理系統、通用的SQL資料庫存取和操作的公共接口(一組API),定義了用來通路資料庫的标準Java類庫,使用這個類庫可以以一種标準的方法、友善地通路資料庫資源
JDBC為通路不同的資料庫提供了一種統一的途徑,為開發者屏蔽了一些細節問題。
JDBC的目标是使Java程式員使用JDBC可以連接配接任何提供了JDBC驅動程式的資料庫系統,這樣就使得程式員無需對特定的資料庫系統的特點有過多的了解,進而大大簡化和加快了開發過程。

JDBC接口(API)包括兩個層次:
面向應用的API:Java API,抽象接口,供應用程式開發人員使用(連接配接資料庫,執行SQL語句,獲得結果)。
面向資料庫的API:Java Driver API,供開發商開發資料庫驅動程式用。
JDBC驅動程式:各個資料庫廠商根據JDBC的規範制作的 JDBC 實作類的類庫
JDBC驅動程式總共有四種類型:
第一類:JDBC-ODBC橋。
第二類:部分本地API部分Java的驅動程式。
第三類:JDBC網絡純Java驅動程式。
第四類:本地協定的純 Java 驅動程式。
第三、四兩類都是純Java的驅動程式,
是以,對于Java開發者來說,它們在性能、可移植性、功能等方面都有優勢。
早期對資料庫的通路,都是調用資料庫廠商提供的專有的 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的最大優點是能以統一的方式處理所有的資料庫。
JDBC-ODBC橋
JDBC-ODBC 橋本身也是一個驅動,利用這個驅動,可以使用 JDBC-API 通過ODBC 去通路資料庫。這種機制實際上是把标準的 JDBC 調用轉換成相應的 ODBC 調用,并通過 ODBC 通路資料庫。
因為需要通過多層調用,是以利用 JDBC-ODBC 橋通路資料庫的效率較低。
在 JDK 中,提供了 JDBC-ODBC 橋的實作類(sun.jdbc.odbc.JdbcOdbcDriver)。
這種類型的 JDBC 驅動程式使用 Java 編寫,它調用資料庫廠商提供的本地 API。
通過這種類型的 JDBC 驅動程式通路資料庫減少了 ODBC 的調用環節,提高了資料庫通路的效率。
在這種方式下需要在客戶的機器上安裝本地 JDBC 驅動程式和特定廠商的本地 API 。
這種驅動利用中間件的應用伺服器來通路資料庫。應用伺服器作為一個到多個資料庫的網關,用戶端通過它可以連接配接到不同的資料庫伺服器。
應用伺服器通常有自己的網絡協定,Java 使用者程式通過 JDBC 驅動程式将 JDBC 調用發送給應用伺服器,應用伺服器使用本地程式驅動通路資料庫,進而完成請求。
多數資料庫廠商已經支援允許客戶程式通過網絡直接與資料庫通信的網絡協定。
這種類型的驅動程式完全使用 Java 編寫,通過與資料庫建立的 Socket 連接配接,采用具體與廠商的網絡協定把 JDBC 調用轉換為直接連接配接的網絡調用。
JDBC API 是一系列的接口,它使得應用程式能夠進行資料庫聯接,執行SQL語句,并且得到傳回結果。
Java.sql.Driver 接口是所有 JDBC 驅動程式需要實作的接口。
這個接口是提供給資料庫廠商使用的,不同資料庫廠商提供不同的實作。
在程式中不需要直接去通路實作了 Driver 接口的類,而是由驅動程式管理器類(java.sql.DriverManager)去調用這些Driver實作。
加載 JDBC 驅動需調用 Class 類的靜态方法 forName(),向其傳遞要加載的 JDBC 驅動的類名。
DriverManager 類是驅動程式管理器類,負責管理驅動程式。
通常不用顯式調用 DriverManager 類的 registerDriver() 方法來注冊驅動程式類的執行個體,因為 Driver 接口的驅動程式類都包含了靜态代碼塊,在這個靜态代碼塊中,會調用 DriverManager.registerDriver() 方法來注冊自身的一個執行個體。
可以調用 DriverManager 類的 getConnection() 方法建立到資料庫的連接配接。
JDBC URL 用于辨別一個被注冊的驅動程式,驅動程式管理器通過這個 URL 選擇正确的驅動程式,進而建立到資料庫的連接配接。
JDBC URL的标準由三部分組成,各部分間用冒号分隔。
jdbc:<子協定>:<子名稱>
協定:JDBC URL中的協定總是jdbc
子協定:子協定用于辨別一個資料庫驅動程式
子名稱:一種辨別資料庫的方法。子名稱可以依不同的子協定而變化,用子名稱的目的是為了定位資料庫提供足夠的資訊。
對于 Oracle 資料庫連接配接,采用如下形式: jdbc:oracle:thin:@localhost:1521:sid。
對于 SQLServer 資料庫連接配接,采用如下形式: jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid。
對于 MYSQL 資料庫連接配接,采用如下形式: jdbc:mysql://localhost:3306/sid。
舉例子說明連接配接資料庫的幾種方式:
準備工作:
1. 加入 mysql 驅動
1). 解壓 mysql-connector-java-5.1.7.zip
2). 在目前項目下建立 lib 目錄
3). 把 mysql-connector-java-5.1.7-bin.jar 複制到 lib 目錄下
4). 右鍵 build-path , add to buildpath 加入到類路徑下.s
方式1:
DriverManager 是驅動的管理類.
1). 可以通過重載的 getConnection() 方法擷取資料庫連接配接. 較為友善
2). 可以同時管理多個驅動程式: 若注冊了多個資料庫連接配接, 則調用 getConnection()
方法時傳入的參數不同, 即傳回不同的資料庫連接配接。
方式二:
方式三:
方式四:編寫一個通用的方法, 在不修改源程式的情況下, 可以擷取任何資料庫的連接配接
解決方案: 把資料庫驅動 Driver 實作類的全類名、url、user、password 放入一個配置檔案中, 通過修改配置檔案的方式實作和具體的資料庫解耦。