Tải bản đầy đủ (.pdf) (21 trang)

Lập trình 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 (2.69 MB, 21 trang )

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

×