Tải bản đầy đủ

Lập trình cơ sở dữ liệu

Trang 143
Chng 7 LP TRÌNH C S D LIU
I. Tng quan
t ha hn ln ca java là kh nng xây dng các ng dng CSDL c lp vi h
n, công ngh này c bit n vi cái tên JDBC (Java Database Connectivity),
JDBC c thit k tng i n gin.
Mô hình JDBC a ra mt tp các lp và các phng thc  giao tip vi ngn d
liu. JDBC API c tích hp vào ngay nn java nên bn không cn phi cài t gì
thêm khi truy cp CSDL.
II. Các ku trình u khin JDBC
Các trình u khin JDBC có th phân thành 4 kiu sau ph thuc vào cách thc
hot ng, cách kt ni vi CSDL.
Kiu 1 : JDBC s dng cu ni ODBC (JDBC-ODBC Bridge )
ODBC là mt công ngh ca Microsoft dùng  kt ni n các h c s d liu
thông qua trình u khin Driver ca h c s d liu ó. Mi h c s d liu cung
p mt trình u khin (Driver) có kh nng làm vic (c, cp nht,..) c c s
 liu ca chúng . Trình u khin này sc ng ký vi b qun lý ODBC .
ODBC API là mt tp các hàm API  truy cp vào CSDL thông qua các trình u
khin, ngi lp trình s s dng các hàm API trong giao din này  truy cp vào
CSDL.
u ni JDBC – ODBC là mt trình u khin s dng mã java  gi li các hàm

trong JDBC API. Bng cách này bn có th kt ni c vi nhiu h qun tr c s
 liu khác nhau.
 có th kt ni vào mt h CSDL c th nào ó (chng hn nh: Access, SQL
Server, MySQL…) s dng cu ni JDBC-ODBC bn cn phi có:
- Trình u khin (Driver) ca dùng  truy cp vào h CSDL ó. Thông thng
trình u khin này c cung cp bi chính các hãng sn xut h CSDL và nó
thng c cài t vào trong máy khi bn cài t h qun tr CSDL.
- Cu ni JDBC-ODBC, ây là trình u khin c cung cp min phí bi hãng
Sun và nó c cài t tng khi bn cài t JDK.
Trang 144
Vì rng trình u khin ODBC phi c cài t vào trong máy trc khi bn có th
 dng nên nó ch thích hp cho các ng dng máy n, hoc c chy trên máy
ch trong mô hình nhiu tng (Multi - tier), không thích hp cho các ng dng chy
trên máy khách nh: Aplet, Fat Client.
Kiu 2 : JDBC kt ni trc tip vi các trình u khin c s d liu .
Kiu kt ni này s dng mã java trc tip gi các hàm trong trình u khin c
thù ca mi h c s d liu mà không phi qua trung gian ODBC . Do vy kiu kt
i này nhanh và hiu qu hn cu ni JDBC – ODBC, nhng phi có trình u
khin c sc thù do nhà phát trin cung cp hoc ca mt hãng th ba nào ó.
Java Application ,
Applet , Servlet
JDBC Driver
ODBC
Database driver
Database

JAVA
Mã Native
{
{
{
Mô hình truy cp CSDL qua cu ni JDBC
Trang 145
Kiu 3 : JDBC kt ni thông qua các ng dng mng trung gian
i kiu kt ni này, máy ch s chu trách nhim kt ni vi c s d liu .
Máy khách ch s dng nhng trình u khin gn nh (thin) có kh nng giao tip
i ng dng trung gian thông qua mng  truy vn d liu .
Kiu 4 : JDBC kt ni thông qua các trình u khin hoàn toàn mã java
Java Application ,
Applet , Servlet


JDBC Driver
Database driver

JAVA
Mã Native
{
{
Database
Mô hình kt ni trc tip
Java Application ,
Applet , Servlet
JDBC Driver
Java Middle Ware
Java Native driver
Database

JAVA
Mã JAVA
{
{
M¹ng
Trang 146
Kiu này cho phép máy khách s dng trình u khin gn nh ni kt trc tip vào trình
u khin c s d liu c thù trên máy ch xa thông qua mng Internet .
III. Các lp trong JDBC API dùng  truy cp CSDL
JDBC API bao gm các lp và các giao din c cha trong hai gói: java.sql và
javax.sql. Gói java.sql cha các giao din và gói cho phép ta thc hin các thao tác c bn
i vi CSDL, gói javax.sql cha các lp và giao din giúp ta thc hin các tính nng cao
p.
1. Mt s giao din và lp trong gói java.sql
a) Mt s giao din
Tên giao din Mô t ý ngha
CallableStatement Giao din cha các phng thc cho phép ta làm vic vi th
c lu tr ni
DatabaseMetaData Cho phép ta xem các thông tin v CSDL
PreparedStatement Giao din này cho phép ta thc thi các câu lnh SQL cha
tham s
ResultSetMetaData
Connection Th hin mt kt ni n CSDL
Driver Giao din mà mi trình u khin phi cài t
ResultSet Th hin mt tp các bn ghi ly v t CSDL
Statement Giao din cho phép ta thc hin các phát biu SQL
Java Application ,
Applet , Servlet
JDBC Driver
Java Native driver
CSDL

JAVA
Mã JAVA
{
{
Internet
Trang 147
b) Mét s lp
Tên lp Ý ngha
Date p biu din kiu DATE
DriverPropertyInfo Cha các thuc tính ca trình u khin ã np
Timestamp Lp biu din cho SQL TimeTemp
DriverManager Lp qun lý các trình u khên
Time p biu din kiu DATE
Types p nh ngha các hng tng ng vi các kiu d liu SQL, hay
còn gi là kiu d liu JDBC
2. Mt s lp và giao din trong gói javax.sql
Tham kho tài liu v JDBC
IV. Kt ni CSDL vi JDBC
  có th làm vic vi CSDL, mt chng trình java (hay bt c chng trình vit
ng ngôn ng nào khác) phi tuân theo các bc sau:
 kt ni n CSDL.
Thc hin các lnh làm vic vi CSDL nh: truy vn, cp nht…
óng kt ni, gii phóng tài nguyên.
Các bc  xây dng mt ng dng CSDL vi JDBC:
1. Chun b
a) Cài t JDBC và trình u khin:
Mt ng java ch có th kt ni và làm vic c vi d liu trong CSDL thông qua
các trình u khin và các th vin JDBC API.
Trc khi truy cp vào h CSDL nào bn phi có trong tay trình u khin tng
ng vi h CSDL ó. Bn có th download các trình u khin cho mt s h CSDL quen
thuc ta ch java.sun.com/jdbc
b) Cài t CSDL
Bn cn la chn và cài t mt h qun tr CSDL,  qun tr phn d liu ca
chng trình. ây là la chn ca bn tu theo tính cht ca d liu trong chng trình
ng nh mc tin bn có  có th mua c h qun tró.
Sau khi bn la chn c h qun tr CSDL phù hp bn tin hành cài t CSDL:
o bng, view, th tc lu tr..
Chú ý:  có th truy cp vào CSDL ca h qun tr CSDL nào thì bn phi có trong
tay trình u khên tng ng.
2. Thit lp kt ni
ây là bc quan trng nht bao gm hai bc:
Trang 148
a) Np trình u khin
JDBC s dng mt b trình qun lý u kin (DiverManager), mi trình u khin
(Driver) cho phép ta làm vic vi mt CSDL c th, cho nên nu bn có 3 CSDL do
3 nhà cung cp khác nhau cung cp thì bn cn phi có 3 trình u khin khác nhau.
 np và ng ký trình u khin bn s dng lnh Class.forName(URL)
Trong ó URL là mt chui mô t các thông tin v tên ca trình u khin dùng kt
i vi c s d liu, chng hn lnh
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
dùng  np trình u khin JDBC-ODBC
Chú ý: Vi mi trình u khin khác nhau thì URL ca phng thc Class.forName()
 khác nhau. Nên  có th np úng trình u khin bn nên thao kho tài liu i kèm
a các trình u khin,  bit c URL tng ng.
b) To mt kt ni
c tip theo bn to mt kt ni n CSDL thông qua trình u khin mà bn
a np  bc trên. n mã dùng  to mt kt ni thông thng nh sau:
Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");
Trong ó :
- url là chui cha thông tin kt ni n CSDL, nu bn s dng cu ni JDBC-ODBC thì
url là “jdbc:odbc:DataSourceName”, chng hn tôi ã to mt DNS tên là TestDB vi tên
truy cp là theht, mt khu truy cp là theht thì câu lnh kt ni n CSDL là
Connection con = DriverManager. getConnection(“jdbc:odbc:TestDB”,"theht", "theht");
- myLogin là tên truy cp, nu mt không có mt khu bn có th truyn cho nó mt xâu
ng
- myPassword là mt khu truy cp, nu mt không có mt khu bn có th truyn cho nó
t xâu rng
Chú ý: Thông thng chui URL có nh dng nh sau:
jdbc:subprotocol:subname
Trong ó:
subprotocol là giao thc con tng ng vi loi CSDL
subname là tên ca ngun d liu (Thông thng nó là tên ca CSDL)
t vài ví du:
Ví d 1:
Np trình u khên và kt ni n CSDL ca MySQL
Trang 149
Trình u khên  tury cp vào CSDL ca MySQL, bn có th download ti a ch
MySQL.com, sau khi download bn có mt tp tin duy nht ã c nén theo chun jar, t
classpath trn tp tin này
- Np tình u khin ca MySQL
Class.forName("com.mysql.jdbc.Driver");
- Kt ni n CSDL
Connection conn = DriverManager.getConnection(
"jdbc:mysql://ServrName/DBName?user=UserName&password=Pass");
- ServerName: là tên ca máy ch CSDL
- DBName: là tên ca CSDL
- UserName: là tên truy cp CSDL
- Pass: là mt khu truy cp
Ví d 2: Np trình u khên và kt ni n CSDL ca SQL Server 7.0, 2000
Có rt nhiu trình u khin cho MS SQL Server, a phn các trình u khin u là các
n phm thng mi, có mt trình u khin mà ta nên s dng ó là trình u khin do
chính hãng Microsoft cung cp, trình u khin này hoàn toàn Free và h try  các
tính nng ca Sql Server.
- a ch download www.microsoft.com
- Sau khi download và tin hành cài t bn s có 3 tp tin trong th mc cài t:
install_dir/lib/msbase.jar
install_dir/lib/msutil.jar
install_dir/lib/mssqlserver.jar
install_dir: là th mc cài t
- t classpath trn 3 tp tin trên
- Np trình u khin
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
- Kt ni n CSDL
Connection conn = DriverManager.getConnection(
" jdbc:microsoft:sqlserver://ServerName:ServerPort;DatabaseName=DBName",
"UserName","Password");
hoc
Connection conn = DriverManager.getConnection
"jdbc:microsoft:sqlserver://ServerName:ServerPort;User=UserName;Password=Pass
word;DatabaseName=DBName");
Trang 150
+ ServerName: Là tên ca máy ch SQL
+ ServerPort:  hiu cng ca SQL, nu trong quá trình cài t mà bn không t
i thì giá tr này là 1433
+ UserName: Tài khon ng nhp vào SQL
+ Password: t khu tng ng vi tài khon ng nhp
- Chuyn CSDL làm vic
conn.setCatalog("DBName");
+DBName: là tên CSDL
Ví d hoàn chnh
import java.sql.*;
class Test{
public static void main(String[] args) {
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://theht:1433;DatabaseName=AA;user=sa;password=");
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("Select * from t");
while(rs.next()) System.out.println(rs.getString("a")+ rs.getString("b"));
} catch (SQLException ex) {}
} catch (ClassNotFoundException ex) { }
}
Ví d 3: Np trình u khên và kt ni n CSDL ca Access vi cu ni JDBC-ODBC
a Sun System
 truy cp vào CSDL ca Access ta không cn phi ti xung và cài t vào máy driver
nào c vì nó c tích hp vào Java, trình u khin này do sun cung cp nó có tên là cu
i JDBC-ODBC
- Np trình u khin
Class.forName("sun.jdbc.odbc. JdbcOdbcDriver ");
- M kt ni bng cách s dng DataSource Name
+ Vào control panel chy chng trình ODBC DataSource 32 bit
+ To mt DataSource Name có tên là MyDB
Connection conn = DriverManager.getConnection(" jdbc:odbc:MyDB");
- M kt ni bng cách s dng File DataSource
Connection conn = DriverManager.getConnection(“jdbc:odbc:Driver={Microsoft
Access Driver (*.mdb)};DBQ=C:/Path/DatabaseName.mdb";”)
MyDB: tên ca DataSource Name mà bn ã to
Path: ng dn n CSDL

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×