L
L
Ậ
Ậ
P TRÌNH JAVA
P TRÌNH JAVA
Chương 7
TRUY CẬP CƠ SỞ
DỮ LIỆU VỚI JDBC
GV: Võ Hoàng Phương Dung
Giới thiệu về JDBC
Cấu trúc JDBC
Các bước sử dụng JDBC
2/25
N
N
ộ
ộ
i dung
i dung
Viết tắt của Java Database Connectivity
Là Java API chuẩn cho việc kết nối Java
application đến Database
Các chức năng
• Thiết lập kết nối đến Database
• Tạo các câu lệnh truy vấn SQL
• Thực thi các câu lệnh truy vấn
• Xem và sửa đổi các kết quả truy vấn
3/25
Gi
Gi
ớ
ớ
i thi
i thi
ệ
ệ
u v
u v
ề
ề
JDBC
JDBC
JDBC hỗ trợ 2 loại truy cập dữ liệu
4/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
2-tier 3-tier
Cấu trúc JDBC gồm 2 phần
• JDBC API
• JDBC Driver
5/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
JDBC API
• Phần lớn các API nằm trong 2 gói
java.sql
javax.sql
• Được chứa trong Java SE và Java EE platform
6/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
JDBC API cung cấp các interface và class để
thao tác dữ liệu
• DriverManager: quản lý các database driver
• Driver: xử lý giao tiếp với database server
• Connection: kết nối database
• Statement: tạo và thực thi các câu lệnh SQL
• ResultSet: lưu trữ và thao tác trên kết quả trả về
• SQLException: xử lý các ngoại lệ trong quá trình
thao tác với database
7/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
JDBC Driver
• Tất cả các Database server đều có JDBC driver
tương ứng
• Có 4 loại JDBC Driver
Loại 1: JDBC/ODBC
Loại 2: Native-API
Loại 3: Open Protocol-Net
Loại 4: Proprietary-Protocol-Net
8/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
JDBC driver loại 1: JDBC-ODBC
9/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
JDBC driver loại 2: Native API
10/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
JDBC driver loại 3: Net pure Java
11/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
JDBC driver loại 4: 100% pure Java
12/25
C
C
ấ
ấ
u tr
u tr
ú
ú
c c
c c
ủ
ủ
a JDBC
a JDBC
Bước 1: Thiết lập kết nối Database
Bước 2: Tạo câu lệnh truy vấn
Bước 3: Thực thi câu truy vấn
Bước 4: Xử lý kết quả trả về
Bước 5: Đóng kết nối
13/25
C
C
á
á
c bư
c bư
ớ
ớ
c s
c s
ử
ử
d
d
ụ
ụ
ng JDBC
ng JDBC
Nạp các java package: sử dụng câu lệnh import
import java.sql.* ;
Đăng ký JDBC Driver: có 2 cách
•Sử dụng method: Class.forName(<driver name>)
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException ex) {
System.out.println("Error");
}
14/25
Bước 1: Thiết lập kết nối Database
• Sử dụng DriverManager.registerDriver()
try {
Driver myDriver = new
oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( myDriver );
}catch(ClassNotFoundException ex) {
System.out.println("Error");
}
15/25
Bước 1: Thiết lập kết nối Database
Xác định Database URL
• Được sử dụng để tạo kết nối đến Database
• Có thể chứa server, port, protocol…
16/25
Bước 1: Thiết lập kết nối Database
RDBMS JDBC driver name URL format
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@hostname:port
Number:databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver
jdbc:db2:hostname:portNumber/database
Name
Sybase com.sybase.jdbc.SybDriver
jdbc:sybase:Tds:hostname:
portNumber/databaseName
SQLSER
VER
com.microsoft.sqlserver.jdbc.SQL
ServerDriver
jdbc:sqlserver://
hostname:portNumber;databaseName
Ví dụ
• SQL SERVER:
“jdbc:sqlserver://myserver:1433;databasename=Lib
rary”;
• Oracle thin driver
“jdbc:oracle:thin:@machinename:1521:dbname”
17/25
Bước 1: Thiết lập kết nối Database
Tạo đối tượng kết nối Connection: sử dụng 1
trong 3 cách
• DriverManager.getConnection(String url)
• DriverManager.getConnection(String url, String
user, String password)
• DriverManager.getConnection(String url,
Properties info)
• Chú ý: ném ra ngoại lệ SQLException
18/25
Bước 1: Thiết lập kết nối Database
• Ví dụ 1
Connection conn =DriverManager.getConnection(url);
• Ví dụ 2
Connection conn
=DriverManager.getConnection(url,"sa","123456");
• Ví dụ 3
Properties info = new Properties( );
info.put( "user", “sa" );
info.put( "password", “123456" );
Connection conn = DriverManager.getConnection(URL, info);
19/25
Bước 1: Thiết lập kết nối Database
Sử dụng 1 trong 3 đối tượng
• Statement: thực thi câu sql không chứa biến
Statement stmt = conn.createStatement( );
• PreparedStatement: thực thi câu sql chứa biến
Các biến được chỉ định bởi dấu ?
Truyền biến vào câu lệnh bằng phương thức
setXXX(index,value) với XXX là kiểu dữ liệu của biến
Ví dụ:
String SQL = "Update Employees SET age = ? WHERE id = ?";
PreparedStatement pstmt=conn.prepareStatement(SQL);
pstmt.setInt(1,4);
Pstmt.setInt(2,5);
20/25
Bước 2: Tạo câu lệnh truy vấn
• CallableStatement: để thực thi các stored-procedure
Sử dụng pt Connection.prepareCall() để khởi tạo
Có 3 loại biến
Biến IN: truyền giá trị bằng pt setXXX(index, value)
Biến OUT: lấy giá trị bằng pt getXXX(index)
Biến INOUT: truyền giá trị bằng setXXX(index, value), lấy giá trị
bằng getXXX(index)
Ví dụ
CallableStatement cstmt = null;
try {
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall(SQL);
} catch (SQLException e) {}
21/25
Bước 2: Tạo câu lệnh truy vấn
Sử dụng 1 trong 3 phương thức
• boolean execute(String SQL): trả lại true nếu kết
quả trả về của câu lệnh truy vấn là ResultSet
• int executeUpdate(String SQL): trả lại số row bị
ảnh hưởng, sử dụng cho Insert, Update, Delete
• ResultSet executeQuery(String SQL): trả lại 1 đối
tượng ResultSet, sử dụng cho Select
Ví dụ
ResultSet rs = statement.executeQuery(“select * from
tblEmployer”);
int n=statement.executeUpdate(“update tblEmployer set
age=’40’ where id=‘1’ ”);
22/25
Bước 3: Thực thi câu truy vấn
ResultSet cung cấp các phương thức để xử lý
các kết quả trả về từ câu lệnh SQL
ResultSet chứa dữ liệu theo dạng Table
Truy cập các hàng dữ liệu bằng cách di chuyển
con trỏ của ResultSet
Ban đầu, con trỏ chỉ hàng đầu tiên
23/25
Bước 4: Xử lý kết quả trả về
Các loại ResultSet (ResultSet Types): xét về
loại con trỏ và sự phản ánh thay đổi dữ liệu
• ResultSet.TYPE_FORWARD_ONLY (mặc định):
con trỏ chỉ dịch chuyển tiến đến trong ResultSet
• ResultSet.TYPE_SCROLL_INSENSITIVE: con
trỏ có thể dịch chuyển đến và lùi, ResultSet không
cập nhật các thay đổi trong Database sau khi đã
được tạo
• ResultSet.TYPE_SCROLL_SENSITIVE: con trỏ
có thể dịch chuyển đến và lùi, ResultSet cập nhật
các thay đổi trong Database sau khi đã được tạo
24/25
Bước 4: Xử lý kết quả trả về
Các loại ResultSet (ResultSet Concurrency):
xét về chức năng thay đổi dữ liệu
• ResultSet.CONCUR_READ_ONLY (mặc định):
ResultSet chỉ đọc
• ResultSet.CONCUR_UPDATABLE: ResultSet có
thể thay đổi được dữ liệu
25/25
Bước 4: Xử lý kết quả trả về