隨著電子商務及動態網站的迅速發展
Java 網絡數據庫編程得到了越來越廣泛的應用
JDBC由一組用Java語言編寫的類組成
它已成為一種供數據庫開發者使用的標准API
通過JDBC本身提供的一系列類和接口
Java 編程開發人員能夠很方便地編寫有關數據庫方面的應用程序
JDBC簡介
JDBC(Java Database Connectivity) 是Java 實現數據庫訪問的API(Application Programming Interface)
與Microsoft 的ODBC(Open Database Connectivity) 一樣
JDBC是建立在X/Open SQL CLI(Call Level Interface)基礎上的
JDBC的主要功能是管理存放在表中的數據
所以它定義了一系列與關系數據庫進行交互的類和接口
如數據庫連接
SQL 語句
結果集和元數據等
一般來說
JDBC 的工作主要分為
個步驟
首先與某一關系數據庫建立連接
然後向數據庫發送SQL 語句
實現對數據庫的操作
最後取得處理結果
實現上述JDBC基本功能的
個步驟程序示例如下
connection con=DriveManager
GetConnection(
jdbc:odbc: ghq
root
password
):
//建立與數據庫的連接
Statement stmt=con
createstatement(); //建立語句對象
ResultSet rs=stmt
executeQuery(
SELECT a
b FROM Table
)
//運行SQL語句
返回數據庫操作結果
while (rs
next()){
int x=getInt(
a
); //獲得數據庫表記錄a項的值
string s=getstring(
b
); //獲得數據庫表記錄b項的值
}
JDBC 接口和驅動程序
JDBC 接口
JDBC提供的接口主要有兩種
一種是面向一般應用程序開發人員的JDBC API
另一種是底層的JDBC Driver API
如圖
所示
圖
使用JDBC的基本結構
JDBC API是一系列抽象的接口
應用程序開發人員通過它可以編寫訪問數據庫的Java應用程序
JDBC API中
抽象類的實現是由驅動程序開發商提供的
驅動程序實現了應用程序和某個數據庫產品之間的接口
它的管理器則對應用程序和驅動程序之間的交互進行控制
JDBC API主要用來連接數據庫和直接調用SQL命令
執行各種SQL語句
利用JDBC API可以執行一般的SQL語句
動態SQL語句
以及帶IN和OUT參數的存儲過程
JDBC中的驅動程序必須提供實現方法的接口
JDBC API被定義在java
sql包中
其中定義了JDBC API用到的所有類
接口和方法
主要的類和接口有
· DriverManager類——處理驅動程序的裝入
為新的數據庫連接提供支持
驅動程序要向該類注冊後才能被使用
進行連接時
該類根據JDBC URL選擇匹配的驅動程序
· java
sql
Driver接口——驅動程序接口
負責確認URL與驅動程序的匹配
建立到數據庫的連接等
其中的方法需要有相應的驅動程序實現
· java
sql
Connection接口——表示到特定數據庫的連接
其中的方法需要有相應的驅動程序實現
· java
sql
Statement接口——為SQL語句提供一個容器
包括執行SQL語句
取得查詢結果等方法
此接口有兩個子類型
(
)java
sql
PreparedStatement
用於執行預編譯的SQL語句
(
)java
sql
CallableStatement
用於執行對一個數據庫內嵌過程的調用
· java
sql
ResultSet接口——提供對結果集進行處理的手段
JDBC Driver API 是面向驅動程序開發商的接口
對於大多數數據庫驅動程序來說
僅僅實現JDBC API提供的抽象類就可以了
也就是說每一個驅動程序都必須提供對於java
sql
Connection
java
sql
Statement
java
sql
PreparedStatement和java
sql
ResultSet等主要接口的實現方法
如果目標DBMS提供有OUT參數的內嵌過程
那麼還必須提供java
sql
CallableStatement 接口
每個數據庫驅動程序必須提供一個java
sql
Driver類
使得系統可以由 java
sql
DriverManager來管理
一個典型的驅動程序是在ODBC上提供對JDBC的實現接口
從而提供與ODBC接口的JDBC
ODBC橋
就像前面圖
所顯示的
由於JDBC放在ODBC之後
所以實現起來簡單而且高效
JDBC 驅動程序
JDBC驅動程序可以分為下面四種類型
分別適用於不同的場合
如圖
所示
圖
驅動程序的
種類型
· JDBC
ODBC橋驅動程序
Sun產品通過ODBC驅動程序提供JDBC的存取
即經過ODBC 驅動程序訪問數據庫
在大多數情況下
ODBC二進制代碼必須在每個使用該數據庫驅動程序的客戶端安裝
所以這種驅動程序主要適用於公司內部網絡
或者在三層結構中用Java編寫的應用服務器代碼
下面以Access數據庫為例來具體說明
代碼如下
Class
forname(
sun
jdbc
odbc
JdbcOdbcDriver
);//調用JDBC
ODBC 驅動程序
Connection con=DriverManager
getConnection(
jdbc:odbc:temp
sa
);
//與數據庫連接
temp
是配置Access數據庫ODBC建立的數據源
sa 為用戶名
口令為空
Statement s=con
createStatement(ResultSet
TYPE_SCROLL_SENSITIVE
ResultSet
CONCUR_READ_ONLY);
//創建Statement
ResultSet rs=s
executeQuery(
select * from test
);
//執行查詢結果存放在ResultSet中
test是一個數據庫表
· 本機應用編程接口的Java 驅動程序
此類驅動程序轉換JDBC調用客戶端的
針對特定數據庫系統的API
如Oracle
Sybase
Informix
DB
或其它的 DBMS
像橋驅動程序一樣
這種類型的驅動程序要求在每一個客戶機上安裝一些二進制代碼
下面以IBM DB
數據庫為例來具體說明
Class
forname(
COM
ibm
db
jdbc
app
DB
Driver
);//調用JDBC 本地驅動程序
String db=
test
;//數據庫名
String URL=
jdbc:db
:
+db;//URL 值
String userid=
adm
;//數據庫用戶名
String password=
abc
;//數據庫用戶密碼
Connection con=DriverManager
getConnection(URL
userid
password);//與數據庫連接
Statement s=con
createStatement();//創建Statement
· 數據庫中間件的純Java 驅動程序
此類驅動程序將JDBC調用轉換成為中間件供應商的協議
然後通過中間件服務器轉換成為DBMS協議
網絡服務器中間件可以連接所有Java客戶端到各種不同的數據庫
但是特定的協議取決於供應商
通常這種方式是JDBC最方便的選擇
提供商可為Internet用戶提供產品套件
為了使這些產品能夠支持Internet訪問
他們還必須處理安全
防火牆穿越等需求
各個提供商正在增加JDBC驅動程序到他們現存的中間件產品中
下面以Oracle 數據庫為例來具體說明
DriverManager
registerDriver(new oracle
jdbc
driver
OracleDriver())
//在Oracle中注冊驅動程序
Driver Manager類允許動態地注冊驅動程序
Connection conn=
DriverManager
getConnection(
jdbc:oracle:thin:@ghq:
:book
system
manager
)
/**
* 將連接字符串傳遞給這個方法以建立到數據庫的連接
連接字符串中的第一個值指明thin JDBC 驅動程序
* (用的是@符號)連接一個名為ghq的Hostname(或連接IP地址)
端口是
數據庫的Oracle
SID是book
連* 接的用戶名是system
口令是manager
**/
Statement statemt=conn
createStatement()
//創建一個SQL語句對象
ResultSet rsltset=statemt
executeQuery(
SELECT USERNAME FROM book
)
//執行查詢結果存放在ResultSet中
book是一個數據庫表
· 直接連接數據庫的純Java 驅動程序
這種驅動程序是本地協議的純Java驅動程序
它轉換JDBC調用由DBMS直接使用的網絡協議
這種方式允許從客戶機到DBMS服務器的直接調用
是Intranet訪問的一種行之有效的解決方案
因為這些協議多數是專用的
因此數據庫提供商將成為這種驅動程序的主要來源
下面以MS SQL 數據庫為例來具體說明
後台數據庫采用MS SQL Server
相應的JDBC Driver為MS SQL Server特定的驅動程序com
inet
tds
TdsDriver(可以在網上下載)
Java版本是
x
JDBC 版本是
String url=
jdbc:jdbc:inetdae:localHost:
;//inetdae是驅動程序子協議名
String login=
sa
;
String password=
;
Class
forName(
com
inet
tds
TdsDriver
);
Connection con=DriverManager
getConnection(url
login
password);
Statement s=con
createStatement();
ResultSet rs=s
executeQuery(
select * from table
);
JDBC 使用方法
目前
Java使用最多的Applet是Web文件的一個組成部分
其中有數據庫存取的Applet和能夠使用JDBC來接觸數據庫的Applet
Java Applet 通過JDBC 訪問數據庫的工作流程可以用圖
來描述
圖
Applet通過JDBC訪問數據庫的工作流程
首先Web 浏覽器從Web 服務器中下載嵌有Applet 的HTML 頁面
解釋並執行Applet 字節碼
當執行到有訪問數據庫的Java 語句時
Applet 直接將相應的Java 命令發送給裝在服務器上的JDBC
通過JDBC 向後端數據庫發出SQL 請求
然後數據庫將處理結果通過JDBC 直接返回給Applet
Applet 通過JDBC 訪問數據庫的方法是一種Web 數據庫訪問的實現方案
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26428.html