Tải bản đầy đủ (.doc) (27 trang)

Giới thiệu java và các cơ sở dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (254.98 KB, 27 trang )

 §å ¸n tèt nghiÖp

Giíi thiÖu Java vµ c¸c c¬ së d÷
liÖu

JAVA vµ c¸c c¬ së d÷ liÖu

Trang 1


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Nội dung

JAVA và các cơ sở dữ liệu.....................................................1
Nội dung................................................................................. 2
Giới thiệu về Java truy cập vào các cơ sở dữ liệu.........................................3
Các Java Enterprise API..................................................................................4
JDBC.................................................................................................................5
Sự áp dụng JDBC.............................................................................................7
Giới thiệu cụ thể về các class của JDBC........................................................................................9
java.sql.DriverManager.................................................................................................................13
java.sql.Driver...............................................................................................................................13
java.sql.Connection......................................................................................................................14
java.sql.Statement........................................................................................................................16
java.sql.PreparedStatement.........................................................................................................17
java.sql.CallableSatement............................................................................................................17
java.sql.ResultSet.........................................................................................................................17


MetaData......................................................................................................................................19

Java RMI và sắp xếp đối tợng (Object Serialization)..................................20
Java IDL..........................................................................................................22
Nhà cung cấp/ Các giải pháp thành viên thứ ba..........................................23
Oracle...........................................................................................................................................23
Cấu trúc Web Server của Oracle......................................................................................................... 24
Java cartridge....................................................................................................................................... 24
Các class Java của riêng Oracle.......................................................................................................... 24

Visigenic........................................................................................................................................25
Visigenic OpenChannel Client cho Java.............................................................................................. 26
Trình giao tiếp giữa JDBC và ODBC của Visigenic..............................................................................26

Tơng lai...........................................................................................................27

Trang 2


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Giới thiệu về Java truy cập vào các cơ sở dữ liệu
Sau khi gia đời, Java đã đợc hởng ứng một cách nhiệt tình và làn sóng
đầu tiên về các ứng dụng viết bằng Java Applet đã phát triển rất mạnh mẽ,
các nhà sáng tạo ra Java ở JavaSoft đã bắt đầu nghĩ đến phát triển Java thành
một platform theo kiểu khách/chủ (client/server). Các nhà phát triển Internet
và các nhà t vấn về vấn đề này đã đa ra các khái niệm về Intranet và nhận ra

rằng Java có rất nhiều điểm thuận lợi trên thị trờng client/server trong có cả
các client không quản lý (zero administration client), phần mềm tập trung
cập nhật và quản trị, các phần mềm không có phiên bản và mẫu tập trung
vào Web. Một trong những tập Java API (một API là một chơng trình ứng
dụng giao tiếp - Application Programming Interfaces) quan trọng và cần
thiết nhất là một trình giao tiếp với các cơ sở dữ liệu do đó dữ liệu có thể đợc
tạo ra, đợc truy cập đến, đợc chia sẻ, cập nhật và tham chiếu thông qua
Internet và Intranet không có dây nối nh các cơ sở dữ liệu trên các mạng
hiện nay.
Chú ý:
Các Java API là các class và các method cho phép các chơng trình Java tơng tác với
các hệ thống trên một thế giới thực (real-world). Ví dụ, API java.net cho phép một chơng
trình Java có thể giao tiếp dùng giao thức TCP/IP và API java.awt cho các chơng trình
Java khả năng hiển thị các menu, các nút và các hộp danh sách. Có một số các core
API ( chẳng hạn nh các class java.lang, java.net, java.net, java.awt, java.applet), là một
phần của bất kỳ một hệ thống Java nào. Sau đó có các phần mở rộng chuẩn của Java
nh Java Server API và Java Management API. Theo thời gian, rất nhiều trong số các
chuẩn này sẽ trở nên một phần không thể thiếu đợc của ngôn ngữ Java và sẽ trở thành
các core API.

Cùng một lúc, các nhà cung cấp các cơ sở dữ liệu, nh Oracle và Informix,
muốn các chơng trình Java applet truy cập vào đợc cơ sở dữ liệu của họ
thông qua Internet và Intranet, do đó họ đã bắt đầu xây dựng các các class và
các method bằng Java để truy cập vào dữ liệu trong các cơ sở dữ liệu của họ.
Điều này tạo ra rất nhiều cách truy cập vào các cơ sở dữ liệu từ các chơng
trình ứng dụng viết bằng Java.

Trang 3



Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Trong một cuộc hội thảo về Java (vào tháng 5 năm 1996), hãng Sun đa ra
một loạt các Java API hớng trực tiếp đến các ứng dụng theo kiểu
client/server, Internet/Intranet. Có rất nhiều các API trong đó có cả các Java
Enterprise API, Java Commerce API, Java Security API và Java
Servlet/Jeeves API, tất cả các API này đã nâng ngôn ngữ Java lên một mức
platform và có mục đích là phát triển các ứng dụng kiểu client/server có thể
chạy trên Internet.
Phần này đề cập chủ yếu đến các Java enterprise API: JDBC API, RMI
(Java Remote Invocation), Object Serialization và hệ thống IDL. Trong các
API trên đây thì API IDBC là API chính (JDBC tức là Java Database
Connectivity - tức là cơ sở dữ liệu kết nối qua lại), API này đã sớm đợc sử
dụng trong rất nhiều các chơng trình Java. Hiện tại, việc truy cập vào cơ sở
dữ liệu đợc thực hiện bằng 3 cách sau: thông qua JDBC của các Java
enterprise API; các phơng pháp truy cập riêng của các nhà cung cấp cơ sở
dữ liệu; các class kiểu "thành viên thứ ba" (the third-party class), kiểu này
đợc áp dụng đối với rất nhiều cơ sở dữ liệu. Các phần tiếp theo sẽ giới thiệu
các cách truy cập vào các cơ sở dữ liệu của các nhà cung cấp và phơng pháp
thông qua thành viên thứ ba và và sơ qua về phơng pháp JDBC.

Các Java Enterprise API
Các Java Enterprise API nhanh chóng trở thành một phần rất có giá trị
của ngôn ngữ lập trình Java và của mô hình Java máy ảo (Java Virtual
Machine). Tất cả các những ngời đợc cấp giấy phép sẽ thực hiên các API
này nh một phần của hệ thống của họ. Do đó, Java Enterprise API là các API
vặn năng và không phụ thuộc vào platform (cross-platform; ở đây platform

là gồm cả phần cứng và hệ điều hành của máy tính).
Nh đã đề cập trên đây, các Java Enterprise API bao gồm JDBC, RMI,
Object Serialization và IDL. JDBC là một tập các class truy cập vào cơ sở dữ
liệu; các RMI API cho phép các chơng trình Java có khả năng gọi các
method của các đối tợng (object) với các khoảng tên khác nhau (namespace); các method và các đối tợng của Object Serialization API cho phép
một chơng trình có thể cất giữ (store) và xử lý trực tiếp các đối tợng này,
thay vì cất giữ và xử lý nó dới dạng dữ liệu; hệ thống ngôn ngữ định nghĩa
giao tiếp IDL (Interface Definition Language) cho phép các chơng trình Java
giao tiếp với nhóm quản lý đối tợng OMG (Object Management Group).
Tập các API trên đây cho phép phát triển các ứng dụng ở mức enterprise
theo kiểu client/server dùng các đối tợng, các applet và các servlet của Java.
Khái niệm các ứng dụng ở mức enterprise là chỉ hệ thống tiện ích quảng cáo,
việc đặt trớc vé máy bay trong hàng không, các hệ thống quảng cáo bằng

Trang 4


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

catalog, các hệ thống thị trờng, quảng cáo các sản phẩm và các hệ thống sản
xuất, các hệ thống ngân hàng (từ các máy ATM để cho phép thanh toán với
ngân hàng trực tiếp qua một mạng lớn trên phạm vi trong một nớc hay qua
nhiều nớc), các hệ thống môi giới, vân vân ...
Tất cả các hệ thống này đều dùng đến một cấu trúc logic ba lớp (threetier) (cơ sở dữ liệu kiểu đầu cuôi (back-end), lớp các quy định trung gian,
lớp front end chính là lớp giao diện đồ hoạ với ngời sử dụng (GUI Graphical User Interface). Mở rộng cấu trúc này, rất nhiều tổ chức đã sử
dụng một cấu trúc gọi là cấu trúc N-Tier (tức là N lớp).
N-Tier logic là gì?


ở đây có lẽ hơi lệch về yếu tố lịch sử một chút. Các ứng dụng client/server đợc bắt đầu
với một server cơ sở dữ liệu và một client với lớp trình diễn (các menu, các màn hình dữ
liệu, vân vân...). Các hệ thống truyền thống này có một chơng trình client chứa tất cả các
ứng dụng logic. Cấu trúc này sau đó đã đợc sửa đổi thành cấu trúc ba lớp (đã đề cập
trên đây), và phần logic business đã đợc tách rời từ client và đợc tạo thành một lớp
riêng biệt. Lớp này hoặc ở phía các client hoặc ở phía server.
Cùng với sự phát triển cực nhanh của Internet và các platform nh Java,
các hệ thống này đang trải qua một sự tiến hoá. Với các chơng trình Java
applet và các servlet, các nhà phát triển có thể tạo ra các chơng trình Java
mà các chơng trình này bao gồm nhiều chức năng (encapsulate function) và
dữ liệu. Các applet này đợc gửi qua mạng (Internet/Intranet) vào một thời
điểm thích hợp và khi đến đợc client nó thực hiện các chức năng của nó.
Để có đợc một cái nhìn toàn cảnh về các Java Enterprise API, bạn có thể
xem JDBC nh là một component làm cho một cơ sở dữ liệu có thể truy cập
đợc, trong khi đó thì RMI và IDL lại có thể đợc coi là phơng tiện để giao
tiếp giữa các platform và các hệ thống.

JDBC
JDBC (Java Database Connectivity- Tức là cơ sở dữ liệu liên kết) là các
class API liên quan đến cơ sở dữ liệu cho các Java applet và các ứng dụng.
JDBC đã đợc SunSoft phát triển và là một phần của Java 1.1 JDBC, cũng
giống nh ngôn ngữ lập trình Java, nó cũng không phụ thuộc vào platform và
cơ sở dữ liệu. Để có thể chạy đợc JDBC trên một platform, thì Java máy ảo
phải có một trình quản lý trình điều khiển địa phơng (native driver
manager); đối với các cơ sở dữ liệu cụ thể, trình điều khiển cho cơ sở dữ liệu
đó cũng cần thiết.

Trang 5



Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Chú ý:
Việc thiết kế JDBC đã đợc hoàn thiện bởi mức gọi giao tiếp (Call Lavel Interface hay
CLI) XOPEN SQL và cơ sở dữ liệu kết nối mở của Microsoft (Microsoft's Open Database
Connectivity hay gọi là ODBC). ODBC dựa trên sự truy cập nhóm qua SQL (SQL
Access Group hay SAG) CLI. Do đó, JDBC và ODBC có cùng một nguồn gốc (common
root). Điểm căn bản ở đây là đối với những ngời biết và thực hiện đợc ODBC thì JDBC
cũng sẽ rất dễ hiểu và áp dụng cũng dễ.

Các nhà thiết kế JDBC dùng cách thiết kế là chắt lọc các các khái niệm từ
ODBC. Hai nguyên nhận chính dẫn đến sự cải tiến JDBC từ ODBC là:
1. ODBC đợc dùng rất rộng rãi, điều này giúp cho các nhà thiết
kế giảm đợc quá trình nghiên cứu của họ.
2. Vì có các sự thực hiện có hiệu quả trên tất cả các platform và
trên hầu hết các cơ sở dữ liệu. Điều này có nghĩa là không cần phải
phát triển các trình điều khiển và các trình giao tiếp mới cho Java;
hãng Sun có thể là đối tác với các nhà cung cấp có sản phẩm về
ODBC để có thể thiết lập nhiều các trình điều khiển, các công cụ, và
sự áp dụng chúng.
Chú ý:
Một sự khác nhau quan trọng giữa JDBC và ODBC là ODBC dùng rất nhiều các phơng
tiện của ngôn ngữ lập trình C, chẳng hạn nh các con trỏ và kiểu trả về void - điều này là
không có trong ngôn ngữ Java. Trong môi trờng C, bạn có thể định nghĩa hàm trả về void
để báo cho trình dịch và thời gian chạy rằng bạn muỗn trả về kiểu con trỏ với kiểu không
xác định. Sau khi bạn nhận đợc con trỏ từ hàm đó, con trỏ đó đó sẽ đợc chuyển thành

một kiểu đặc biệt. Các nhà thiết kế Java mong muốn rằng sẽ tránh đợc điều này và các
thao tác trên các kiểu con trỏ khác , do đó họ đã thiết kế Java là một ngôn ngữ có các
kiểu trả về rất nghiêm khắc. Các method trả về các đối tợng mà đã đợc biết trớc. Java
không hề có con trỏ.

Các nhà thiết kế ở JavaSoft thực hiện JDBC bằng những khái niệm rất
trừu tợng từ ODBC, chẳng hạn nh kết nối (Connection) và tập kết quả
(ResultSet)

Chú ý:

Trang 6


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Các hoạt động thông dụng trên một cơ sở dữ liệu đòi hỏi phải trả về các hàng (rows) và
các hàng dữ liệu, các cột này bao gồm rất nhiều các cột, hoặc các trờng, đợc gọi là tập
kết quả (ResultSet).

Nhìn vào các đặc điểm của JDBC, chúng rất thành công trong việc cung
cấp khả năng truy cập vào cơ sở dữ liệu SQL. Đối với JDBC, các thao tác
đơn giản trên cơ sở dữ liệu, chẳng hạn nh hỏi đáp, tạo, cập nhật, có thể đợc
thực hiện bằng các method đơn giản. Đối với các thao tác phức tạp hơn,
chẳng hạn nh các tập kết quả phức tạp và cất các thủ tục các tham số IN và
OUT, JDBC có các lệnh riêng biệt. Đối với các chơng trình tự động và các
công cụ của các nhà thiết kế, JDBC có các class và các method MetaData,

các class và các method này cung cấp các thông tin về rất nhiều các đặc
điểm mà cơ sở dữ liệu hỗ trợ, cấu trúc bảng, và các đặc điểm khác.

Chú ý:
Khái niệm các stored procedure là các hàm và thủ tục bao gồm các lệnh dựa trên cơ
sở dữ liệu đợc cất trên server cơ sở dữ liệu. Khi các chơng trình phía client muốn thực
hiện một hàm thì thay vì phải dùng các lệnh cơ sở dữ liệu, thì chũng gọi các stored
procedure. Điểm thuận lợi của việc gọi này là stored procedure ở trên server, điều này
cho phép tính đồng nhất, vấn đề an ninh và có hiệu quả. Cũng giống nh các thử tục
thông thờng, các stored procedure cũng lấy các tham số. Các tham số IN đợc truyền
cào các stored procedure và chũng không đợc trả lại; Các tham số OUT là các giá trị
đợc các stored procedure trả về. Khi làm việc với các stored procedure, hệ thống
phải làm việc với các tham số này cũng với bất kỳ một tập kết quả nào (ResultSet).

Các phần sau này sẽ đề cập cụ thể hơn về các class và các method về
JDBC.

Sự áp dụng JDBC
JDBC đợc thực hiện giống nh gói (package) java.sql. Bạn dùng gói này
bằng cách khai báo import java.sql.* trong các chơng trình Java của bạn.
Hình vẽ sau đây mô tả chiến lợc thực hiện JDBC. Phần bên dới lớp API là
trình quản lý trình điều khiển JDBC cho rất nhiều loại cơ sở dữ liệu viết cho
sự kết hợp giữa phần cứng và hệ điều hành, điều này là một phần của mô
hình Java máy ảo. Trình quản lý trình điều khiển JDBC có thể đợc viết cho
một cơ sở dữ liệu cụ thể nào đó hoặc nó có thể là một trình quản lý trình
điều khiển chung cho nhiều cơ sở dữ liệu. Hãng Sun có trình quản lý trình

Trang 7



Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

điều khiển cho các cơ sở dữ liệu chung JDBC và co cả trình quản lý trình
điều khiển cho cơ sở dữ liệu ODBC.
Cầu nối JDBC/ODBC (Bridge JDBC/ODBC) là một lớp mỏng bên trên
JDBC để hớng các lời gọi đến JDBC xang các lời gọi cho ODBC. Trình cầu
nối này đợc cung cấp miễn phí với JDBC, và đã đợc Intersolv phát triển. Cầu
nối JDBC/ODBC là một lớp rất mỏng bởi vì JDBC rất giống với ODBC về
mặt thiết kế các class và các method ( do vậy không cần một lớp với nhiều
chơng trình để chuyển đổi bởi lẽ bản thân JDBC và ODBC cũng đã có rất
nhiều điểm giống nhau) và JDBC cho phép truy cập vào tất cả các cơ sở dữ
liệu chính thông qua các trình điều khiển của ODBC. Vì JDBC rất gần gũi
với ODBC hãng Sun đã làm cho nó trở nên dễ dàng đối với các nhà phát
triển và các nhà cung cấp phần mềm độc lập có thể bắt đầu phát triển các
ứng dụng về cơ sở dữ liệu bằng Java. Nếu nh họ đã phát triển một trình giao
tiếp cơ sở dữ liệu hoàn toàn khác thì sẽ mất rất nhiều thời gian và công sức
để có thể giao tiếp Java với các cơ sở dữ liệu chính.
Các nhà cung cấp nh Oracle và Borland có các trình điều khiển cho
JDBC để truy cập trực tiếp vào các cơ sở dữ liệu của họ chẳng hạn nh cơ sở
dữ liệu Oracle 7 của Oracle và Interbase của Borland. Các trình điều
khiển này cũng có giá trị tơng tự trong việc phát triển các ứng dụng về cơ sở
dữ liệu dùng Java.
Nếu ta nhìn sâu hơn một chút về các đặc điểm của JDBC, chúng ta sẽ
thấy là JDBC có sự lựa chọn và load các trình điều khiển hoàn toàn động,
các trình giao tiếp cho các kết nối, các lệnh và các tập kết quả. JDBC đợc
thực hiện nh một dữ liệu ống trong ngữ cảnh các tập kết quả có chứa các
dòng dữ liệu và cả sự mô tả về các dòng dữ liệu. Sự mô tả về các dòng dữ

liệu đợc gọi là tập kết quả MetaData. Dùng các method trong java.sql, một
chơng trình có thể yêu cầu loại của tập kết quả chẳng hạn nh các tên của các
cột và các kiểu dữ liệu. JDBC đã chuẩn bị các lệnh và các đối tợng lệng có
thể gọi đợc cho các cơ sở dữ liệu địa phơng xử lý dùng các thủ tục đã đợc
biên dịch và các stored procedure.

Trang 8


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Sự áp dụng ODBC
của Sun

Sự áp dụng của
các nhà cung cấp
cơ sở dữ liệu

Các tập tin *.class

JDBC API/ java.sql.*

JDBC API/ java.sql.*

Applet/ ứng dụng

Trình quản lý trình điều

khiển JDBC của nhà
cung cấp cơ sở dữ liệu

Trình quản lý trình
điều khiển JDBC

Cầu nối giữa ODBC
và IDBC

Trình điều khiển ODBC

Hệ điều hành

Các tập tin *.class

Java máy ảo

Phần cứng/hệ điều hành
của máy

Hệ điều hành

server cơ sở dữ liệu

Cơ sở dữ liệu

Hình 1. JDBC Implementation components.

Giới thiệu cụ thể về các class của JDBC
Khi bạn nhìn vào hệ thống cấp bậc của các class JDBC, nh mô tả trên

hình dới đây, bạn sẽ thấy các đối tợng đợc đặt trong một cấu trúc tăng dần.
Trình quản lý trình điều khiển kết nối với cơ sở dữ liệu và trả về một đối tợng kết nối. Bạn dùng các method có liên quan đến các lệnh trong một đối t-

Trang 9


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

ợng kết nối đẻe thực hiện các lệnh của SQL, và nó sẽ trả về đối tợng tập kết
quả mỗi khi cần thiết. Sau đó bạn lấy dữ liệu từ tập kết quả ra bằng từng
hàng một và từng cột một.

Quản
Quảnlýlýtrình
trìnhđiều
điềukhiển
khiển
getConnection()

Kết nối

Kết nối

Kết nối

Lệnh
Lệnh

createStatement()

prepareStatement()
prepareCall()

Lệnh

Lệnh có thể gọi đợc

Lệnh riêng biệt

executeUpdate()
executeUpdate()
executeQuery()
executeQuery()

MetaData
MetaData
Tập kết quả

Dữ
Dữliệu
liệu

execute
execute()()
getMoreResult()
getMoreResult()
getResultSet()
getResultSet()


Trang 10


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Hình 2. Cấu trúc phân lớp của class JDBC

Các loại class chính là implementation, kết nối cơ sở dữ liệu, các lệnh, dữ
liệu và các lỗi. Bảng 1.1 cho biết các loại và các class JDBC cho các loại đó.

Loại

Class JDBC

Implementation

java.sql.Driver
java.sql. DriverManager
java.sql.DriverPropertyInfo
java.sql.Connection
java.sql.Statement
java.sql.PreparedSatement
java.sql.CallableSatement
java.sql.ResultSet
java.sql.SQLWarning


Cơ sở dữ liệu kết nối
Các lệnh SQL
Dữ liệu
Các lỗi

Bảng 1.1: Các loại Class chính và các Class có liên quan

Khi bạn qua mỗi class, bạn sẽ thực hiện một dự án nhỏ (mini-project). Dự
án nhỏ (mini-project) này là truy cập vào một số ít các trờng trong cơ sở dữ
liệu ORDERS.MDB nh là một ví dụ với truy cập cơ sở dữ liệu của Microsoft.
Hình 3 dới đây mô tả một lợc đồ đơn giản gồm 4 bảng cho hệ thống order
entry.

Trang 11


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Bảng của các khách hàng

Customer_ID
Company_Name
Contact_Name
Address
....
....


1

N
Bảng yêu cầu

1
N
Bảng yêu cầu cụ thể

Order_ID
Product_ID
Unit_Price
Quantity
Discount
....
....

Order_ID
Company_Name
Order_Date
Requred_Data
Shipped_Date
.....
.....

N

1
Bảng của các khách hàng


Product_ID
Product_Name
Supplier_ID
Quantity
.....
.....

Hình 3. Lợc đồ Cơ sở dữ liệu dự án nhỏ về đơn đặt hàng.

Bảng các khách hàng có các chi tiết cụ thể về khách hàng. Một khách
hàng có thể có rất nhiều entry trong các bảng đặt hàng. Mỗi bảng đặt hàng
có thể rất nhiều dòng; các dòng này đợc cất trong bảng các chi tiết cụ thể về
đặt hàng. Mỗi một bảng chi tiết đặt hàng có thể có nhiều nhất một sản phẩm
từ bảng các sản phẩm, nhng một sản phẩm có liên quan đến rất nhiều dòng
yêu cầu đặt hàng. Trình điều khiển truy cập ODBC trở nên chuẩn đối với sản
phẩm truy cập và rất nhiều sản phẩm khác nh Visual Basic. Bạn có thể load
về miễn phí trình điều khiển ODBC 32 bit từ Web site của công ty
Microsoft.
Sau đây xin giới thiệu cụ thể về các package trong bảng 1.1 trên đây.

Trang 12


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

java.sql.DriverManager
Lớp quản lý trình điều khiển theo dõi các trình điều khiển hiện có của

JDBC. Có thể có nhiều trình điều khiển trên một hệ thống - hệ thống ở xa
hay hệ thống địa phơng. Trong khi khởi tạo, trình quản lý trình điều khiển
load tất cả các class trong tài sản của hệ thống sql.drivers. Các trình điều
khiển có thể đợc thực hiện bởi các method địa phơng viết bằng C/C++, hoặc
bằng một chơng trình Java có thể giao tiếp với một cơ sở dữ liệu bằng trình
giao tiếp RPC (Remote Procedure Call) hoặc giao tiếp với một server cơ sở
dữ liệu đang chờ các kết nối từ phía các client. Sự thực hiện và giao tiếp cụ
thể ra sao là phần việc của các nhà phát triển. Thỉnh thoảng mỗi một trình
điều khiển trong khi đợc load lên nên tự register bằng cách dùng method
DriverManager.registerDriver. Thời điểm tốt để thực hiện điều này là trong
mã khởi tạo của class tĩnh (static class).
JDBC dùng cú pháp URL (theo mẫu: <subprotocol>: ) để
xác định các kết nối JDBC. Trong đó, subprotocol odbc đợc giành cho tên
nguồn dữ liệu kiểu ODBC. Một ví dụ JDBC URL nh sau, một ODBC
Testdb có tên ngời sử dụng là Tester1 và mật khẩu là TestPW sẽ có URL là
jdbc : odbc : Tester1; UID=Tester1; PWD=TestPW. Trình quản lý trình
điều khiển hớng các trình điều khiển đến các JDBC URL; nói cách khác, nó
theo dõi mối quan hệ của trình điều khiển load các class nhờ đó, trình load
class chỉ có thể truy cập vào đợc trình điều khiển đợc chính nó load. Khi mà
một kết nối cần đợc mở, trình quản lý trình điều khiển lựa chọn một trình
quản lý trình điều khiển tơng ứng bằng trình tìm kiếm bảng bên trong để mở
kết nối đó. Các trình điều khiển phải phù hợp với kiểu an ninh của Java.
Kiểu an ninh thông dụng nhất đợc dùng bởi các trình duyệt Web (thông thờng là Netscape Navigator) đó là các applet chỉ có thể kết nối trở lại với
server của chúng (điều này có nghĩa là các chơng trình applet chỉ có thể kết
nối với các ứng dụng nằm trên máy server mà từ đó các applet này đã đợc
load về), trong khi đó các ứng dụng lại có thể kết nối tự dó đến các mày
khác. Kiểu an ninh nãy sẽ sớm đợc thay đổi đối với một signed-class, các
applet tin cậy với kiểu thiết lập an ninh động. Trình quản lý trình điều khiển
cung cấp các kết nối đối tợng.


java.sql.Driver
Class java.sql.Driver cung cấp thông tin về trình điều khiển cơ sở dữ liệu
chung và cài đặt. Nó sẽ đợc load trong quá trình khởi tạo cơ sở dữ liệu và sẽ
đợc hỏi các thông tin về trình điều khiển trong chơng trình Java. Điều này
có nghĩa là class này sẽ đợc thờng trú trong bộ nhớ trong quá trình chơng

Trang 13


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

trình Java đó đợc thực hiện. Sau đó class này nên nhỏ ở mức tối thiểu. Các
method trong java.sql.Driver có method connect (để kết nối với một cơ sở
dữ liệu) và method getPropertyInfo (để lấy các thông tin yêu cầu về kết nối
đến một cơ sở dữ liệu). Nh đã đề cập trên đây, trình điều khiển này nên gọi
DriverManager.registerDriver để register chính nó. Trình quản lý trình
điều khiển sẽ giữ thông tin về class Driver, trong đó có cả thông tin về kiểm
tra truy cập và an ninh về nguồn load class đó về.
Nh đã đề cập trên đây, trình quản lý trình điều khiển sẽ load tất cả các
trình điều khiển mà nó nhận biết đợc trong tài nguyên của hệ thống
sql.drivers. Một phơng pháp khác là khứt khoát chỉ load những trình điều
khiển xác định nào đó bằng cách dùng method forName trong Class
Object. Việc dùng method này đợc cho nh sau
java.sql.Driver dbDriver =
Class.forName("SomeCompany.SomeDatabase.Driver").newInstance().

Lệnh này sẽ load trình điều khiển từ $CLASSPATH\

SomeCompany.SomeDatabase.Driver.class và trả về kết quả là đối tợng
Driver.
Đối với dự án nhỏ của bạn, bạn có thể load trình điều khiển dùng dòng
lệnh sau đây trong chơng trình:
Java.sql.Driver database = class.forName("jdbc : odbc").newInstance();

java.sql.Connection
Đối tợng kết nối là một con trỏ đến một cơ sở dữ liệu. Nói cách khác, đối
tợng này là một cửa sổ vào một cơ sở dữ liệu cung cấp một context cho các
đối tợng Statement và các đối tợng ResultSet. Đối tợng kết nối hỗ trợ giải
quyết các thuộc tính nh bắt đầu (begin), giao phó (commit) và bỏ qua
(abort) và cung cấp các method để tạo các đối tợng Statement.
Câu lệnh sau:
connection.createStatement()

Sẽ tạo một đối tợng Statement thông thờng.

Trang 14


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Các câu lệnh sau:
connection.createStatement()
connection.prepareStatement(<SQL String>)

Tạo một đối tợng prepareStatement, đối tợng này là một lệnh SQL đợc

dịch ra. Loại lệnh này đợc dùng để gọi nếu nh sự lệnh đó đợc gọi nhiều hơn
một lần ở trong chơng trình. Đối tợng prepareStatement dịch SQL String
lần đầu tiên sau đó nó dùng lệnh đã đợc dịch cho phần còn lại của các lời
gọi.
Các câu lệnh sau:
connection.createStatement()
connection.prepareCall(<SQL String>)

Sẽ tạo một đối tợng CallableStatement, đối tợng này sẽ gọi một stored
procedure. Một stored procedure là một thử tục trong cơ sở dữ liệu SQL
trên server. Nh đã đề cập trên đây, loại thủ tục này (stored procedure) thực
hiện các nguyên tắc về thơng mại (business) phù hợp với các chơng trình nh
là thủ tục đó đợc cất trên server. Các client dùng thủ tục này dùng cú pháp
nh sau {call <tên-thủ-tục> [tham-số]}.
Method setAutoCommit của kết nối có thể bật hoặc tắt chức năng tự động
giáo phó (commit) thực hiện (transaction), điều này cho phép bạn thực hiện
đợc quá trình xử lý transaction. Nếu chức năng tự động giao phó đang ở chế
độ tắt thì có thể dùng method commit() để gửi sự thay đổi hoặc dùng method
rollback() để huỷ bỏ các thay đổi kể từ lần giao phó cuối cùng.

Quá trình xử lý thực hiện (Transaction proccessing)
Transaction proccessing là một khái niệm chung đợc dùng trong ngữ cảnh của các cơ sở
dữ liệu để biểu thị (denote), trong số những thứ khác (among other things), bảo đảm tình
trớc sau nh một, khả năng có thể lấy lại đợc, và tính trung thực của các cơ sở dữ liệu có
liên quan. Một transaction bao gồm rất nhiều lệnh SQL để đọc và cập nhật các cơ sở dữ
liệu. Để có thể đảm bảo đợc rằng tất cả các transaction đều đợc thực hiện nh là một đơn

Trang 15



Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

vị đơn (single unit) của công việc, thì các method commit() và method rollback() đợc
dùng.
Một trong những transaction thông dụng nhất đợc dùng trong các hệ thống ngân hàng là
transaction tự động trả tiền. Hai tập lệnh sẽ đợc dùng để ghi vào sổ nợ trong tài khoản
của bạn và ghi vào sổ nợ của phía ngân hàng cho vay tiền. Nếu cả hai lệnh SQL trên
đều thực hiện thành công thì transaction đó đợc commit. Ngợc lại nếu nh hệ thống không
thể thực hiện đợc một trong hai lệnh thì transaction đó không đợc phép hoàn thành.
Không chỉ nh vậy mà tất cả các dữ liệu bị ảnh hởng bởi một bộ phận của transaction
cũng đều bị đặt trở lại giá trị bạn đầu của chúng, nếu không nh vậy thì hoặc là ngời cho
vay sẽ đợc một món tiền một cách thần bí hoặc khách hàng bị mất số tiền trong tài
khoản nợ mà không hề trả tiền. Điều này đợc gọi là rollback().
Nói ngắn gọn, trình điều khiển commit/rollback cần thiết khi một ai đó tạo các thay đổi
đối với dữ liệu trong rất nhiều các bảng của rất nhiều các cơ sở dữ liệu. Để đảm bảo tính
trớc sau nh một của dữ liệu, thì nên dùng commit() tất cả các sự cập nhật có thể đợc tạo
ra. Nếu nh chỉ một phần của sự cập nhật đó có thể thì nên dùng rollback() và sau đó thử
làm lại.

Đổi với các dự án nhỏ của chúng ta thì chúng ta có thể tạo đối tợng kết
nối nh sau:
Connection testConn = DriverManager.getConnection("jdbc : odbc :
JDBCTest; IUD= sa; PW=pw");

Bây gời chúng ta có thể tạo ra một lệnh đối tợng đơn giản bằng cách
dùng:
Statement simpleStmt = testConn.createStatement();


java.sql.Statement
Class Statement có một method là executeQuery cho các lệnh thông thờng của SQL, method này trả về dữ liệu (trong khuôn khổ của đối tợng
ResultSet), hoặc thực hiện method cho các lệnh của SQL, với nhiều hơn một
ResultSet (rất hiếm khi). Method executeUpdate có thể đợc dùng cho các
lệnh nh UPDATE, DELETE, INSERT hoặc tơng tự. Method này không trả
về một tập kết quả (ResultSet).

Trang 16


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

java.sql.PreparedStatement
Class java.sql.PreparedStatement là mở rộng của class Statement để cho
phép khả năng thêm lệnh SQL biên dịch trớc vào và nó hỗ trợ các tham số
kiểu IN. Việc dịch trớc đợc thực hiện có hiệu quả nếu nh một lệnh SQL đợc
thực hiện nhiều lần. Các tham số đợc đặt bằng cách dùng các method setInt,
setFloat, setLong (và các method khác).

java.sql.CallableSatement
Đối tợng java.sql.CallableSatement là sự mở rộng của PreparedStatement
để hỗ trợ thêm các stored procedure. Đối tợng này sẽ trả về các tham số
kiểu OUT. Nhng chúng đòi hỏi phải đợc đăng ký đơn giản bằng cách dùng
method registerOutParameter. Sau khi đối tợng CallableSatement đợc thực
hiện thì các tham số kết quả đợc đọc bằng cách dùng các method getInt,
getLong, getFloat và các method khác.


java.sql.ResultSet
Đối tợng java.sql.ResultSet chứa các dữ liệu liên quan đó là kết quả của
lệnh SQL. Dữ liệu đợc xử lý theo thứ tự từng hàng một nối tiếp nhau. Trong
một hàng dữ liệu, dữ liệu đợc truy cập theo bất cứ thứ tự nào bằng cách dùng
một chỉ số số thứ tự hoặc theo tên. Ví dụ, lệnh sau
java.sql.ResultSet.getFloat(5) sẽ lấy giá trị ở cột 5 của hàng dữ liệu hiện
thời. Lệnh sau đây cho phép lấy dữ liệu ở cột 5 của hàng dữ liệu hiện thời
bằng câu lệnh sau java.sql.ResultSet.getFloat("AuthorRoyalty") (ở đây,
AuthorRoyalty là tên của dữ liệu lấy ra) nếu nh cột thứ 5 là cột
AuthorRoyalty. Lệnh java.sql.ResultSet.next() sẽ trỏ đến hàng dữ liệu tiếp
theo.

Chú ý:
Đối với phiên bản JDBC 1.0 không cung cấp kiểu thanh gạt cso thể gạt đợc hoặc các
bookmark thanh gạt kiểu ODBC.

Trang 17


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Nếu bạn thực hiện một dự án nhỏ (mini-project), để có thể lấy đợc tất cả
các yêu cầu của khách hàng "SYBEX Computer Books" thì đoạn chơng
trình sau làm điều đó:
ResultSet rsOrders = simpleStmt.executeQuery("SELECT Order_ID,
Order_Date FROM Orders WHERE Customer_ID = 'SYBEX'");

while (rsOrders.next())
{
String OrderID = rsOrders.getString("Order_ID");
java.sql.Date Orderdate = rsOrders.getDate("Order_date");
..// In và hiển thị ID của khách hàng và ngày tháng
}

ở đây, đối tợng Statement đã đợc tạo ra ở phần trên đợc dùng để lấy hai
cột (Order ID và Order Date) của tất cả các yêu cầu của khách hàng với
phần định danh của khách hàng (Customer ID) là "SYBEX". Method next()
chuyển đến hàng dữ liệu tiếp theo trong tập kết quả. Đễn khi không còn dữ
liệu nữa thì nó trả về kết quả FALSE và dừng vòng lặp while. Method
getString() và method getDate() đợc dùng để lấy dữ liệu từ một hàng của dữ
liệu.
Bây giờ, để có đợc các chi tiết cụ thể trong từng yêu cầu của khách hàng
thì bạn phải truyền Order_ID đến cơ sở dữ liệu trong đối tợng Statement.
Quay trở lại sơ đồ hình 3 cho các bảng có liên quan. Trong tờng hợp này,
chúng ta dùng một đối tợng PreparedStatement với một tham số.

PreparedStatement prepStmt = testConn.preparedStatement("SELECT *
FROM OrderDetails WHERE Order_ID = ?);
prepStmt.setString(1, OrderID); // Đặt giá trị cho tham số
ResultSet rsOrdDet = prepStmt.execute();
while (rsOrdDet.next()){
// Xử lý từng hàng
// Lấy dữ liệu cột từ hàng hiện thời
// Dùng các method getXXX(), hiển thị, vv...
}

Trên đây, một đối tợng PreparedStatement đã đợc tạo ra với một tham số

đợc chỉ ra bằng dấu ? trong SQL. Tham số thứ nhất đợc thiết lập (đợc chỉ ra
bằng dấu ? trong lệnh SQL) tơng đơng với OrderID chúng ta lấy từ các lệnh
trớc đó. Tiếp theo vấn đề thắc mắc đợc giải quyết. Đoạn chơng trình trên đây
sẽ tạo một tập kết quả với tất cả các chi tiết cụ thể của một yêu cầu của
khách hàng đợc chỉ ra bằng biến OrderID. Hàng sẽ chứa toàn bộ các cột
trong bảng chứa các chi tiết cụ thể về yêu cầu của khách hàng, từ khi lệnh
SELECT * SQL đợc thực hiện.

Trang 18


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Một ví dụ khác, nếu bạn muốn cập nhật một sản phẩm trong bảng các sản
phẩm, bạn sẽ làm nh sau:

PreparedStatement
prepStmt
=
testConn.prepareStatement("UPDATE
Products SET Product_Name = ? WHERE Product_ID = ?");
PrepStmt.setString(1, "Mastering Java");
PrepStmt.setString(2,"1935-2");
int upRows = PrepStmt.executeUpdate();

Trên đây, một đối tợng PreparedStatement với hai tham số đã đợc tạo: một
tham số cho tên sản phẩm, và tham số thứ hai cho định danh của sản phẩm.

Trong hai lệnh tiếp theo, tham số thứ nhất đợc thiết lập với tên sách (tên sản
phẩm) và tham số thứ hai là số ISBN của cuốn sách đó. Method
executeUpdate() không trả về tập kết quả mà nó trả về một số nguyên để cho
bạn biết rằng bao nhiêu hàng đã đợc cập nhật. Nh bạn thấy, đây là khái niệm
của các method đơn giản cho các nhiệm vụ đơn giản.

MetaData
MetaData là thông tin về đối tợng cơ bản, và các chơng trình cần dùng
đến nó để tìm ra các đặc điểm đợc trình điều khiển cơ sở dữ liệu hỗ trợ, hoặc
để tìm ra các tên của các cột , kích thớc hoặc các công việc tơng tự. Nh đã
đề cập, tập kết quả (ResultSet) là một dòng dữ liệu theo mô hình ống. Điều
này có nghĩa là nó có thông tin mô tả về tập kết quả ngoài dữ liệu thực tế.
Thông tin thêm này có thể đợc lấy ra nhơg method getMetaData(). Đối tợng
ResultSetMetaData có một tập các method nh getColumnCount(),
getColumnDisdplaySize(), getColumnLabel() và getColumnName(). Các
hàm này có thể đợc dùng để lấy các thông tin về các cột dữ liệu.
Ngoài đối tợng ResultSetMetaData, JDBC hỗ trợ đối tợng
DatabaseMetaData, đối tợng này cho biết các thông tin về cơ sở dữ liệu.
Đối tợng DatabaseMetaData có khoảng 100 method, trong đó có
getDatabaseProductName(), getDatabaseProductVersion() và các method
từ các đặc điểm đã đợc thực hiện, đến lợc đồ cụ thể, đến các tên của các
stored procedure. Có các method để yêu cầu các thông tin về sự thực hiện
(implementation), các chi tiết cụ thể, và các hạn chế chẳng hạn nh
getDatabaseProductName(), getDatabaseProductVersion(), getMaxConnections(),
getTables(), getTableTypes(), getMaxColumnLength(), getMaxCharLiteralLength(),
getProcedures()...

Trang 19



Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

Nh đã đề cập trên đây, JDBC API đã phát triển qua phiên bản 1.0 vào
tháng 6/1996. Hãng Sun và hãng Intersolv đã đa ra cầu nối giữa JDBC và
ODBC bản beta. Các nhà cung cấp khác dang rất cố gắng trong việc tạo ra
các trình điều khiển cho JDBC và phần mở rộng của riêng họ. Để kiểm tra
sự thực hiện của JDBC, bạn có thể thấy là sự kết hợp giữa hai lực lợng là các
nhà thiết kế của hãng JavaSoft và các nhà phê bình về các đặc điểm của
JDBC đã ngày càng phát triển đợc các API đơn giản, gọn và hết sức mạnh
mẽ để cho các chơng trình Java truy cập vào các cơ sở dữ liệu. Hình 4 dới
đây miêu tả một hệ thống chung cho hệ thống ứng dụng cơ sở dữ liệu trên
Internet/Intranet.
(hình 4- hình 20.6 trang 823)
Trên Web server và applet server đã có đủ các applet cần thiết cho hệ
thống và server cơ sở dữ liệu đã có dữ liệu trên đó. Các máy PC Java client
và các thiết bị ngoại vi Java load các applet về, chạy chúng và kết nối vào
server cơ sở dữ liệu thông qua JDBC.
Một ví dụ, một máy in applet có thể cập nhật máy in bằng các đặc điểm
kỹ thuật đợc lu trữ trên server hoặc lấy các thông tin cấu hình hoặc thông tin
về ngời sử dụng trên server trên server cơ sở dữ liệu bằng cách dùng các kết
JDBC. Trong tờng hợp một máy Java PC client, thì applet có thể là một mấu
để điền các phí tổn mà dùng kết nối JDBC để lấy các thông tin (chẳng hạn
nh các loại, giới hạn của phí tổn) từ server cơ sở dữ liệu và để gửi toàn bộ
bản chi phí đến bảng chi phí trên server cơ sở dữ liệu. Để loại hệ thống này
làm việc, bạn cần phải có các applet để đảm bảo rằng chúng kết nối với một
server khác trên Internet/Intranet, hoặc một applet server và server cơ sở dữ
liệu trên cùng một máy. Hiện tại mức an ninh thông dụng là các applet chỉ

có thể viết dữ liệu lên server mà từ đó chúng đã đợc load về.

Java RMI và sắp xếp đối tợng (Object Serialization)
RMI đợc viết tắt từ Java Remote Method Invocation cho phép các đối tợng tồn tại trên nhiều khoảng tên (Multiple namespaces), đợc phân bố thông
qua mô hình các Java máy ảo (Java Virtual Machine). Mỗi một khoảng tên
(namespace) có thể ở trên cùng một máy hoặc ở trên các máy khác nhau
trên mạng. Khi mà method gọi qua biên giới của Java máy ảo đến một
khoảng tên khác, thì sẽ không có các biến toàn cục mà cso thể chia sẻ (dùng
chung) giữa các đối tợng. Đây chính là nơi mà các RMI API xuất hiện.
Chúng (RMI API) cho phép các đối tợng tồn tại lâu (over time), dai dẳng.
Việc sắp xếp các đối tợng đợc thiết kế đặc biệt cho các đối tợng của Java.
Điều này có nghĩa là các đối tợng trong Java có thể đợc cất và xử lý lại nh là
một đối tợng. Kết hợp giữa RMI và sự sắp xếp các đối tợng, bạn sẽ nhận đợc

Trang 20


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

các đối tợng có thể đợc truyền qua các biên giới với dữ liệu mà tồn tại lâu
(over time). Các lời gọi RMI cho phép bạn có thể gọi các method ở xa, và sự
sắp xếp các đối tợng cho phép bạn truyền các đối tợng này đến các method ở
xa đó.

Chú ý:
Hãy xem xét hệ thống ngân hàng để làm một ví dụ cho các khái niệm vừa nêu trên đây.
Một client dùng máy tính PC gọi đến một thủ tục kiểm tra đợc đặt tại tài khoản trên

server ở ngân hàng để lấy các thông tin kiểm tra trớc khi họ trả một số tiền điện thoại
lớn. Máy client PC có thể chạy Windows trong khi máy server trên ngân hàng có thể
chạy HPUNIX. Trong trờng hợp này thì máy client PC sẽ dùng RMI để xác định và gọi
thủ tục kiểm tra. Số tài khoản sẽ đợc truyền cho thử tục ở xa thông qua sự sắp xếp các
class và các method. Thủ tục kiểm tra ở xa sẽ chạy các lệnh SQL và truyền kết quả trở
lại cho máy tính PC tại nhà của bạn thông qua việc dùng sự sắp xếp đối tợng các class
và các method.

Trong các khái niệm trừu tợng thì RMI và Object Serialization hỗ trợ cho
quá trình phát triển các hệ thống với các đối tợng phân tán. Điều này có
nghĩa là sao vậy? Thông thờng thì khi bạn chạy một chơng trình thì tất cả
các hàm và dữ liệu đều có sẵn trên máy tính của bạn, do vậy chơng trình chỉ
đơn thuần là gọi các thủ tục và các hàm đó với các tham số để thực hiện
chúng. Nhng trong thế giới của nhiều client/server, không phải tất cả các thủ
tục hày các hàm đều có sẵn trên máy tính của bạn vì rất nhiều nguyên nhân
trong đó có nguyên nhân về an ninh, nguyên nhân về trạng thái gần dữ liệu
và nguyên nhân về trung tâm logic lu trữ dữ liệu.
Nếu bạn cho phép các thủ tục ở xa có thể cập nhật/thêm/xoá dữ liệu trên
một cơ sở dữ liệu tập trung, các chơng trình có lỗi hoặc các chơng trình của
những kẻ có âm mu phá hoại có thể làm mất hoặc hỏng dữ liệu. Nếu bạn
muốn làm một vài sự tóm tắt về dữ liệu, thì thực tế là bạn nên làm điều đó
ngay trên server cơ sở dữ liệu thay vì chuyển dữ liệu đến máy client và làm
tại đó. Nếu bạn có kiểu server logic, chẳng hạn nh phần tạo ID hoặc bộ phận
kiểm tra giới hạn của thẻ tín dụng, thì server này nên ở trên lớp trung tâm.
Trong tất cả các trờng hợp này, khi bạn cần một dịch vụ, bạn sẽ dùng RMI
để gọi một đối tợng với các tham số yêu cầu.
Các modul của các hàm hay các applet trên thực tế mà thực hiện chức
năng trên có thể ở bất kỳ nơi nào trên Internet. Sau khi xử lý song phần

Trang 21



Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

logic, các applet sẽ gửi kết quả trở lại cho phía client thông qua RMI. Việc
đóng và mở gói các tham số qua các quá trình xử lý đợc gọi là marshalling.
Các RMI API thêm trình giao tiếp Remote và các class nh RemoteObject,
RemoteServer, RemotException và UnicastRemoteServer vào các API khác.
Chơng trình Java mở rộng và thực hiện các trình giao tiếp này để phát triển
các ứng dụng đối tợng trung tâm (object-centric) làm việc qua các khoảng
tên (namespace).
Các API Object Serialization thêm các trình giao tiếp nh ObjectOutput và
ObjectInput và các class nh ObjectInputStream và ObjectOutputStream để
cho phép các chơng trình ứng dụng có khả năng lu trữ và đọc đợc các đối tợng. Các method để làm điều này là readObject và writeObject.

Java IDL
Hệ thống Java IDL (Interface Definition Language) là một khái niệm
cũng tơng tự nh Java RMI API. Sự khác nhau ở đây là Java RMI là để cho
các đối tợng và các method chỉ giành cho các đối tợng của Java, điều này là
hoàn toàn trái ngợc với IDL, IDL không phụ thuộc vào ngôn ngữ và hệ điều
hành (Operating System). Java IDL dịch theo chuẩn CORBA (CORBA là viết
tắt của Common Object Request Broker Architecture tức là theo cấu trúc
trung gian yêu cầu đối tợng thông dụng) thông qua nhóm quản lý đối tợng
OMG (Object Management Group) và hớng các đối tợng của Java đến chuẩn
CORBA.
Chuẩn CORBA đợc thực hiện từ OMG đợc dùng rất rộng rãi trong các hệ
thống ngân hàng, buôn bán hàng hoá, môi giới và các hệ thống khác. Các hệ

thống này đợc thiết lập một cách rất hoàn hảo và có các chức năng rất cao.
Hệ thống Java IDL cung cấp một phơng pháp cho các chơng trình Java để
giao tiếp với các hệ thống kể trên và dử dụng các hàm logic về thơng mại và
các method hiện có. Ví dụ, một applet mới có thể làm việc nh một hệ thống
môi giới hỏi đáp dựa trên chuẩn CORBA. Một chơng trình Java applet có
thể encapsulate an ninh ở phía client và có chức năng giao tiếp với ngời sử
dụng qua giao diện đồ hoạ (GUI). Sự tác động qua lại với hệ thống trung
gian back-end sẽ đợc thực hiện bởi các class IDL.
Hệ thống Java IDL hiện nay đang ở phiên bản alpha 2 và bao gồm các
module runtime phía client, module runtime phía server và công cụ phát
triển IDLGEN. Run time phía client cho phép các chơng trình Java có thể
giao tiếp đợc với các server CORBA, run time phía server cho phép các chơng trình Java có thể đóng vai trò nh là các server mạng cho các IDL client

Trang 22


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

và chơng trình IDLGEN tạo ra các định nghĩa giao tiếp Java và các mẫu
(template) cho các nhiệm vụ trên server và client.
Mặc dù hệ thống IDL mở rộng Java platform thành các hệ thống CORBA
và do đó nó cho phép các nhà phát triển Java có thể thực hiện các hệ thống
mà sử dụng các hệ thống đã có sẵn, hiện nay Java IDL vẫn đang ở phiên bản
alpha. Một điều chắc chắn rằng nó còn đòi hỏi rất nhiều các đặc điểm có ích
hơn trớc khi phiên bản 1.0 chính thức ra đời.

Nhà cung cấp/ Các giải pháp thành viên thứ ba

Mỗi một nhà cung cấp đều có giải pháp để tác động đến Web. Hầu hết
các cơ sở dữ liệu đều hỗ trợ ODBC; do vậy, bạn có thể dùng JDBC để giao
tiếp với các cơ sở dữ liệu. Nếu nh bạn muốn khai thác các đặc điểm của một
cơ sở dữ liệu nào đó hoặc các đặc điểm có liên quan đến một cấu trúc cụ thể
nào đó chẳng hạn nh Web Server của Oracle hoặc kênh mở (Open Channel)
của Visigenic thì bạn cần phải áp dụng các giải pháp đã đợc các nhà cung
cấp phát triển. Một giải pháp rất tốt là dùng các trình điều khiển và các API
chung cho các chơng trình và các applet đợc sử dụng rộng rãi trên
Internet/Intranet. Đối với các ứng dụng mang tính tập đoàn trên Intranet thì
bạn có thể áp dụng các cấu trúc và các trình điều khiển cụ thể cho một cơ sở
dữ liệu cụ thể hoặc giải pháp của một nhà cung cấp nào đó.
Để lấy một ví dụ về một nhà cung cấp cơ sở dữ liệu cụ thể nào đó, phần
này sẽ đề cập đến chiến lợc Java của các nhà cung cấp chính trên thị trờng,
Oracle và các giải pháp của Visigenic là một ví dụ về bộ phần mềm giao tiếp
kiểu thành viên thứ ba cho rất nhiều các hệ thống cơ sở dữ liệu. Visigenic đợc biết đến bởi các trình điều khiển cho ODBC không phụ thuộc vào
platform và không phụ thuộc vào cơ sở dữ liệu.

Oracle
Chiến lợc Web của Oracle dựa trên sản phẩm Web Server của họ và sự
kết hợp với hệ thống cơ sở dữ liệu Oracle 7. Ngôn ngữ truy cập cơ sở dữ liệu
PL/SQL chính là sự thực hiện SQL của Oracle. Ngôn ngữ SQL tuân theo các
chuẩn của ANSI (American National Standards Institute) và cũng có phần
mở rộng cho cơ sở dữ liệu Oracle 7. Trong phần này, bạn sẽ đợc giới thiệu về
kết nối Java-PL/SQL.

Trang 23


Đồ án tốt nghiệp


Giới thiệu Java và các cơ sở dữ
liệu

Cấu trúc Web Server của Oracle
Web Server 2 là một hệ thống dựa trên cấu trúc các component. Các
component đợc gọi là các cartridge, các cartridge này đợc đóng gói các
chức năng và các trình tiện ích. Ví dụ về các cartridge trong đó có cả
PL/SQL, xử lý thẻ tín dụng, các luật về thơng mại, quản lý catalog, và kết
nối với các hệ thống tài sản.
Các component trung gian Web-request là các component kiểu front end
trên Internet/Intranet. Bạn có thể đóng gói các module thơng mại thành các
cartridge và cài vào hệ thống. Các cartridge chạy trên khoảng tên/URL
riêng của chúng và chúng có chức năng cross-functional do đó chúng có thể
tác động với nhau bằng cách sử dụng API chuyển đổi cartridge bên trong.

Java cartridge
Một trong những cartridge là sự bổ xung mô hình Java máy ảo của
Oracle phía server và đợc gọi là Java server. Cartridge Java server có thể tơng
tác với tất cả các cartridge hiện có và sẽ có, chẳng hạn nh sự kết nối qua lại
với hệ thống tài sản. Điều này có nghĩa là các ứng dụng Java có thể tơng tác
với PL/SQL của Oracle để thao tác trên cơ sở dữ liệu Oracle 7, điều này tơng
tự nh khả năng hiện có của ODBC đối với các chơng trình Java từ JDBC
API. Ơ' đây Java cartridge cung cấp khả năng của PL/SQL của Oracle cho
các chơng trình Java.
Bạn cũng có thể phát triển các applet cartridge và các servlet cartridge
dùng Java mà có thể thực hiện đợc một tập các chức năng well-defined,
chẳng hạn nh hỏi đáp về cơ sở dữ liệu, cập nhật một sự tơng tác qua lại nào
đó. Hiện nay Oracle đang thi hành các API quản lý cartridge do đó có thể
các cartridge component này có thể đợc phân phối trên các server thông qua
một tổ chức hoặc trong các trờng hợp về thẻ tín dụng và các ứng dụng thơng

mại khác trên toàn cầu.

Các class Java của riêng Oracle
Oracle đã thêm vào Java các package sau đây:
oracle.plsql chứa Java class Wrapper đối với ngôn ngữ PL/SQL của
Oracle. Class này cho phép các chơng trình Java tất cả các khả năng để
thao tác trên các cơ sở dữ liệu của Oracle.

Trang 24


Đồ án tốt nghiệp

Giới thiệu Java và các cơ sở dữ
liệu

oracle.rdbms chứa các class truy cập cơ sở dữ liệu. Các class này cho
phép quản lý cơ sở dữ liệu một cách trừu tợng, trong đó có cả việc quản
lé an ninh và quản lý cơ sở dữ liệu.
oracle.html chứa các class để tạo các trang HTML. Oracle áp dụng
việc tạo các trang Web động để đảm bảo rằng các trang Web đó phản
ánh đúng dữ liệu hiện thời. Các trang Web đợc tạo ra từ các kết quả
việc hỏi đáp và chúng là các trang Web ảnh hởng lẫn nhau. Bạn có thể
tạo các ứng dụng chắc chắn để thêm/sửa đổi/xoá các thông tin trong
các cơ sở dữ liệu của Oracle thông qua việc dùng các trình duyệt Web.
Oracle cũng hỗ trợ các JDBC API chung, do đó bạn có thể phát triển các
ứng dụng chung mf có thể truy cập vào các cơ sở dữ liệu của Oracle. Đối với
các ứng dụng cho các cơ sở dữ liệu lớn của Oracle mà phải làm việc với rất
nhiều dữ liệu, các chức năng về thơng mại, các Java Cartridge API, và các
class PL/SQL và các class có liên quan thì phù hợp hơn. Trong các trờng hợp

này, nếu các chơng trình chỉ làm việc với các cơ sở dữ liệu của Oracle,
những sự áp dụng của Oracle, thì chúng đã đợc tối u hoá cho việc truy cập
vào các cơ sở dữ liệu của Oracle. Do vậy ở đây cấu trúc mở không cho ta
một sự thuận lợi nào.
Chiến lợc của Oracle cho bạn một sự nhìn nhận về Java có thể đợc mở
rộng để hỗ trợ các ứng dụng kiểu client/server đợc phát triển cho các hệ
thống cơ sở dữ liệu mission-critical.

Visigenic
Visigenic là một công ty chuyên về phát triển các trình điều khiển không
phụ thuộc vào cơ sở dữ liệu và không phụ thuộc vào platform. Dây truyền
sản xuất của họ bao gồm các trình điều khiển cho ODBC, các phần mềm
kiểm tra và các bộ phần mềm ODBC không phụ thuộc vào platform, các sản
phẩm theo kiểu kênh mở (OpenChannel) và các sản phẩm đối tợng trung
gian cho Java và cho các hệ thống CORBA. Họ cũng hỗ trợ các ứng dụng
Java dựa trên đối tợng.
Đối với khía cạnh hiện tại đó là truy cập cơ sở dữ liệu thì có hai công cụ
hỗ trợ việc truy cập dữ liệu phân tán cho Java platform: Visigenic
OpenChannel Client cho Java và Visigenic JDBC cho trình điều khiển
ODBC. Các sản phẩm này cho phép truy cập vào cơ sở dữ liệu từ xa thông
qua Internet và Intranet bằng cách sử dụng một cấu trúc client/server đúng
mà có hỗ trợ toàn bộ các chức năng ODBC. Quay lại hình 3, cấu trúc của
trình điều khiển JDBC/ODBC cũng tơng tự nh việc áp dụng JDBC/ODBC

Trang 25


×