http://www.ebook.edu.vn 1
Chương 9
X lý cơ s d liu trong Java
Các ng dng Internet ngày nay thường được da trên các cơ s d liu ln được
cài đặt bng cách s dng công ngh cơ s d liu quan h. K t khi xut hin t năm
1995, Java được yêu cu cn cung cp kh năng kết ni vi các cơ s d liu quan h
hin có như Ingres, Oracle, Access, và SQL Server,…Các tin ích cho phép truy xut cơ
s d liu nm trong gói java.sql.
Ngày nay các thông tin vi dung lượng ln đều được lưu tr trong các kho d liu
ln. Kh năng truy xut ti các cơ s d liu là điu không th thiếu đối vi các ng
dng. Điu này li càng đúng vi các ng dng chy trên mng máy tính nói chung và
Internet nói riêng. Trong chương này chúng ta s đi vào tìm hiu giao din lp trình ng
dng JDBC ca Java và cách thc để kết ni vi mt cơ s d liu t mt ng dng Java
thông qua JDBC.
1. JDBC Java Database Connectivity API
SUN đã phát trin mt giao din lp trình ng dng API để truy xut cơ s d liu-
JDBC. Mc tiêu đặt ra ca SUN là:
JDBC là mt giao din lp trình ng dng mc SQL.
JDBC cn có được nhng kinh nghim làm vic vi các API cơ s d liu hin có.
JDBC cn đơn gin
Giao din lp trình ng dng mc SQL nghĩa là JDBC cho phép ta xây dng các
lnh SQL và nhúng các lnh SQL bên trong các li gi Java API. Nói tóm li, v cơ bn ta
vn s dng SQL nhưng JDBC cho phép ta dch mt cách trôi chy gia thế gii cơ s
d liu và thế gii ng dng Java. Kết qu ca bn t cơ s d liu, được tr v dưới
dng các đối tượng Java và nếu có vn đề khi truy xut nó s đưa ra các ngoi l.
JDBC API đã chun hóa:
Cách thiết lp ti cơ s d liu
Cách tiếp cn để khi to các truy vn
Cách thc để to ra các truy vn có tham s
Chun hóa cu trúc d liu ca kết qu truy vn
o Xác định s ct
o Tra tìm các metadata.
JDBC API chưa chun hóa cú pháp SQL. JDBC không phi là SQL nhúng. Lp
JDBC nm trong gói java.sql. Nó bao gm hai phn:
JDBC API là mt giao din lp trình ng dng viết bng ngôn ng Java thun túy.
Trình qun lý Driver JDBC truyn tin vi các trình điu khin c th ca nhà sn
xut, các trình điu khin cơ s d liu ca nhà sn xut truyn tin vi cơ s d
liu.
2. Cu trúc ca JDBC
JDBC thc hin các mc tiêu ca nó thông qua mt tp hp các giao tiếp JDBC,
mi giao tiếp thc đưc thc hin bi tng nhà sn xut. Tp hp các lp thc thi các
giao tiếp JDBC cho mt mô tơ cơ s d liu c th được gi là mt trình điu khin
JDBC. Khi xây dng mt ng dng cơ s d liu, ta không phi xem xét đến tt c các
lp cơ s. JDBC che du các chi tiết ca tng cơ s d liu và như vy ta ch cn quan
tâm đến ng dng ca mình.
http://www.ebook.edu.vn 2
Hình 9.1
Các cơ s d liu và các trình điu khin
Hình 9.2
2.1. Kiu 1
Các trình điu khin này s dng mt công ngh cu ni để truy xut ti mt cơ s
d liu. Cu ni JDBC-ODBC được bt đầu đưa vào t JDK 1.2 là mt ví d đin hình
cho kiu driver này. Nó cung cp mt gateway ti API ODBC. Cài đặt ca API này thc
hin truy xut ti cơ s d liu thc tế. Gii pháp cu ni thường yêu cu phn mm phi
được cài đặt trên h thng client, nghĩa là chúng không phi là các gii pháp tt cho các
ng dng mà không cho phép cài đặt phn mm trên client.
Cu ni JDBC-ODBC cung cp cách truy xut thông qua mt hay nhiu trình điu khin
ODBC.
Ưu đim:
o Đây là mt cách tiếp cn tt để hc JDBC.
o Hu ích cho các công ty đã cài đặt trình điu khin ODBC trên tng máy
client.
o Đây là cách duy nht để truy xut được ti các cơ s d liu trên máy tính
để bàn mc thp.
Nhược đim:
o Không phù hp vi các ng dng quy mô ln. Hiu năng thp vì có cn
nhiu công đon cn thc hin để chuyn t JDBC sang ODBC.
o Không h tr tt c các đặc trưng ca Java.
o Người s dng b hn chế bi chc năng do trình điu khin ODBC cung
cp.
2.2. Kiu 2
Các trình điu khin kiu 2 là các trình điu khin API-trình điu khin gc. Điu
này nghĩa là mã Java gi các phương thc C hoc C++ được cung cp bi tng nhà sn
xut h qun tr cơ s d liu để thc hin truy xut ti cơ s d liu. Gii pháp này vn
http://www.ebook.edu.vn 3
yêu cu phi có phn mm trên h thng client. JDBC chuyn các li gi ti JDBC API
thành các li gi kết ni vi giao din lp trình ng dng ca máy khác cho mt cơ s d
liu c th như IBM, Informix, Oracle, hoc Sybase.
Ưu đim:
Hiu năng tt hơn kiu 1, vì trình điu khin kiu 2 cha các mã lnh đã được biên
dch được ti ưu hóa cho h điu hành ca server có s d liu hot động chế độ hu
trường,
Nhược đim
o Người s dng cn đảm bo rng trình điu khin JDBC ca nhà sn xut
cơ s d liu có trên tng máy khách.
o Phi có chương trình đã được biên dch cho mi h điu hành mà ng dng
s chy.
o Ch s dng có hiu qu trong các môi trường có kim soát như mt mng
intranet
2.3. Kiu 3
Các trình điu khin kiu 3 cung cp cho client mt API mng chung, API này sau
đó chuyn thành thao tác truy xut cơ s d liu mc server. Mt khác, trình điu khin
JDBC trên client s dng các socket để gi mt ng dng trung gian (middleware) trên
server để chuyn các yêu cu ca client thành mt API c th đối vi tng server. Kết
qu là trình điu khin này đặc bit linh hot, vì nó không cn phi có phn mm cài đặt
trên client và mt trình điu khin có th cung cp kh năng truy xut ti nhiu cơ s d
liu.
Java Middleware thun tuý
Trình điu khin Java thun túy cho các chương trình trung gian cơ s d liu để
dch các li gi JDBC cho giao thc ca nhà sn xut phn mm trung gian, trình điu
khin này sau đó được chuyn cho mt giao thc gn vi cơ s d liu c th bi phn
mm server trung gian.
Ưu đim:
o Được s dng khi mt công ty có nhiu cơ s d liu và mun s dng mt
trình điu khin JDVC để kết ni vi tt c các cơ s d liêu.
o Trình điu khin nm trên server, vì thế không cn trình điu khin JDBC
trên tng máy client
o Thành phn server được ti ưu hóa cho h điu hành đang chy chế độ
hu trường
Nhược đim:
o Cn mã lnh cho cơ s d liu c th trên server trung gian
2.4. Kiu 4
S dng các giao thc mng được tích hp sn vào engine cơ s d liu, các
driver kiu 4 truyn tin trc tiếp vi cơ s d liu bng cách s dng socket Java. Đây là
trình điu khin Java thun túy nht. Kiu trình điu khin này thường do nhà sn xut cơ
s d liu cung cp.
Trình điu khin Java thun túy ti kết ni trc tiếp vi cơ s d liu chuyn các
li gi JDBC thành các gói tin được truyn đi trên mng theo mt khuôn dng được s
dng bi cơ s d liu c th. Cho phép mt li gi trc tiếp t máy client ti cơ s d
liu.
Ưu đim:
http://www.ebook.edu.vn 4
o Không cn cài phn mm đặc bit nào trên client hoc server. Có th được
ti v mt cách linh hot
Nhược đim
o Không ti ưu cho h điu hành server vì vy trình điu khin không th tn
dng các đặc trưng ưu vit ca h điu hành
3. Kết ni cơ s d liu
Hình 10.3
Hình v trên cho thy cách thc mà mt ng dng JDBC truyn tin vi mt hoc
nhiu cơ s d liu mà không cn biết đến các chi tiết có liên quan đến cài đặt driver cho
cơ s d liu đó. Mt ng dng s dng JDBC như là mt giao tiếp, thông qua đó nó
truyn tt c các yêu cu liên quan đến cơ s d liu ca nó.
Khi ta viết các applet hay ng dng cơ s d liu, ta có th cung cp các thông tin
c th v trình điu khin JDBC là URL cơ s d liu. Thm chí ta có th nhp vào URL
cơ s d liu cho ng dng và applet vào thi gian chy dưới dng các tham s.
JDBC là gói kết ni cơ s d liu bao gm giao din lp trình ng dng căn bn
Java API. Java cung cp mt interface độc lp vi cơ s d liu để m mt kết ni ti cơ
s d liu, bng cách phát ra các li gi SQL ti cơ s d liu và nhn v kết qu là mt
tp hp các d liu. góc độ k thut, JDBC đóng vai trò như là mt chương trình cài
đặt giao tiếp mc li gi SQL được định nghĩa bi X/Open và được h tr bi hu hết
các nhà cung cp cơ s d liu quan h. Để thc hin giao tác vi mt kiu cơ s d liu
c th, ta cn phi có mt trình điu khin JDBC đóng vai trò như là mt cu ni gia các
li gi phương thc JDBC và interface cơ s s liu.
3.1. DriverManager
DriverManager cung cp phương tin để np các trình điu khin cơ s d liu vào
mt ng dng Java hoc mt applet; nó chính là cách để JDBC thiết lp mt liên kết vi
cơ s d liu. ng dng Java, trước tiên to mt đối tượng DriverManager, kết ni vi cơ
s d liu bng cách gi phương thc tĩnh getConnection() ca lp DriverManager, vi
tham chiếu truyn vào ging như mt URL được gi là URL cơ s d liu. DriverManager
tìm kiếm mt driver h tr vic kết ni trong tp hp các driver hin có. Nếu tìm thy
driver nó truyn địa ch cơ s d liu cho driver và yêu cu driver to ra mt kết ni. Kết
ni ti cơ s d liu được tr v dưới dng mt đối tượng Connection.
Tt c các driver JDBC cung cp mt cài đặt giao tiếp java.sql.Driver. Khi mt
DriverManager được to ra, nó ti mt tp hp các driver được xác định bi thuc tính
ca java.sql.Driver. Driver được np vào thi gian chy Java, nó có nhim v to ra mt
đối tượng và đăng ký đối tượng vi DriverManager. Các driver cn cho ng dng có th
được np bi phương thc Class.forName()
http://www.ebook.edu.vn 5
Driver myDriver=(Driver)Class.forName(“specialdb.Driver”);
3.2. Connection
Mi khi các driver cn thiết được np bi DriverManager, s có mt liên kết vi mt
cơ s d liu được to ra nh phương thc getConnection() ca lp DriverManager. Cơ
s d liu cn làm vic được xác định thông qua mt tham s String đóng vai trò như
địa ch tham chiếu ti cơ s d liu. Không có mt khuôn dng chun nào cho địa ch xâu
cơ s d liu; DriverManager truyn xâu địa ch cho tng driver JDBC đã được np và
xem nó có hiu và h tr kiu cơ s d liu đã được xác định.
Jdbc:odbc:financedata
Trong đó financedata là ngun cơ s d liu cc b. Để truy xut ti mt cơ s d
liu t xa t mt máy client ta có th dùng cú pháp sau:
Jdbc:odbc:drvr://dataserver.foobar.com:500/financedata.
Đặc t JDBC API khuyến cáo mt URL cơ s d liu nên có dng như sau:
Jdbc:<sub-protocol>:<sub-name>
Trong đó <sub-protocol> xác định dch v kết ni cơ s d liu và <sub-name>
cung cp tt c các thông tin cn thiết để dch v tìm cơ s d liu và kết ni ti nó.
Phương thc getConnection() trên DriverManager hoc là tr v mt đối tượng
Connection biu din liên kết ti cơ s d liu đã được ch ra, hoc là đưa ra ngoi l
nếu liên kết không được thiết lp.
3.3. Statement
Giao tiếp Connection cho phép người s dng to ra mt câu lnh truy vn ti cơ
s d liu. Các lnh truy vn được biu din dưới dng các đối tượng Statement hoc
các lp con ca nó. Giao tiếp Connection cung cp ba phương thc để to ra các lnh
truy vn cơ s d liu là: createStatement(), prepareStatement(), và precpareCall().
createStatement() được s dng cho các lnh SQL đơn gin không liên quan đến các
tham s. Phương thc này tr v mt đối tượng Statement được s dng để phát tra các
truy vn SQL ti cơ s d liu, bng cách s dng phương thc executeQuery().
Phương thc này chp nhn mt lnh SQL như là mt xâu và các kết qu tr v
dưới dng mt đối tượng ResultSet. Các phương thc khác có trong giao tiếp Statement
để phát ra các lnh SQL ti các cơ s d liu là phương thc execute(), phương thc
này được s dng cho các truy vn SQL và tr v nhiu resultset và phương thc
executeUpdate() được s dng để phát ra các lnh INSERT, UPDATE, hoc DELETE.
Ngoài giao tiếp Statement cơ bn, mt đối tượng Connection có th được s dng
để to ra mt đối tượng PreparedStatement và các CallableStatement biu din các th
tc stored procedure trong cơ s d liu. Mt lnh SQL có th liên quan đến nhiu tham
s đầu vào, hoc mt lnh mà ta mun x lý nhiu ln, có th được to ra bng cách s
dng lnh prepareStatement() trên đối tượng Connection, phương thc này tr v đối
tượng PreparedStatement. Lnh SQL được truyn cho phương thc prepareStatement()
là mt lnh được biên dch trước vì vy vic x lý nhiu ln mt lnh s hiu qu hơn.
Lp con ca lp Statement h tr vic thiết lp các giá tr ca các tham s đầu vào được
biên dch trước thông qua các phương thc setXXX(). Đối tượng PreparedStatement có
phương thc executeQuery() không cn tham s, thay vào đó nó x lý các lnh SQL
được biên dch trước trên cơ s d liu. Chú ý rng không phi tt c các nhà sn xut
cơ s d iu hoc các driver JDBC đều h tr các lnh được biên dch trước.
3.4. ResultSet
Các dòng d liu được tr v t vic x lý mt lnh được biu din bng mt
ResultSet trong JDBC. Ví d, phương thc executeQuery() ca Statement tr v mt đối
tượng ResultSet. Đối tượng ResultSet cung cp các cách để duyt qua các dòng d liu
được tr v t vic x lý câu lnh truy vn SQL thông qua phương thc next() ca nó;
các trường d liu trong mi hàng có th được tìm kiếm thông qua các tên hoc ch mc
ct bng cách s dng phương thc getXXX(). Người dùng cn phi biết kiu d liu