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
                
              
                                            
                                
            
                       
            
                 33 trang
33 trang | 
Chia sẻ: lylyngoc | Lượt xem: 1975 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Chương 7 Truy cập cơ sở dữ liệu với JDBC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LẬ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ộ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ới thiệu về JDBC
 JDBC hỗ trợ 2 loại truy cập dữ liệu
4/25
Cấu trúc của JDBC
2-tier 3-tier
 Cấu trúc JDBC gồm 2 phần
• JDBC API
• JDBC Driver
5/25
Cấu trúc củ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ấu trúc củ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ấu trúc củ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ấu trúc của JDBC
 JDBC driver loại 1: JDBC-ODBC
9/25
Cấu trúc của JDBC
 JDBC driver loại 2: Native API
10/25
Cấu trúc của JDBC
 JDBC driver loại 3: Net pure Java
11/25
Cấu trúc của JDBC
 JDBC driver loại 4: 100% pure Java
12/25
Cấu trúc củ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 bước sử dụ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()
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ề
 Loại ResultSet được xác định đồng thời tại lúc 
tạo đối tượng statement
• createStatement(int RSType, int RSConcurrency);
• prepareStatement(String SQL, int RSType, int 
RSConcurrency);
• prepareCall(String SQL, int RSType, int 
RSConcurrency);
RSType: chỉ định ResultSet Types
RSConcurrency: chỉ định ResultSet Concurrency
26/25
 Bước 4: Xử lý kết quả trả về
 Ví dụ
Statement stmt = conn.createStatement( 
ResultSet.TYPE_FORWARD_ONLY, 
ResultSet.CONCUR_READ_ONLY);
 Các loại phương thức của ResultSet
• Các phương thức di chuyển con trỏ
• Các phương thức lấy dữ liệu trong ResultSet
• Các phương thức cập nhật dữ liệu
27/25
 Bước 4: Xử lý kết quả trả về
 Các phương thức di chuyển con trỏ
28/25
 Bước 4: Xử lý kết quả trả về
public void beforeFirst() throws SQLException di chuyển đến vị trí bắt đầu của 
ResultSet
public void afterLast() throws SQLException di chuyển đến vị trí cuối cùng của 
ResultSet
public boolean first() throws SQLException di chuyển đến hàng đầu tiên
public void last() throws SQLException di chuyển đến hàng cuối cùng
public boolean absolute(int row) throws 
SQLException
di chuyển đến 1 hàng chỉ định
public boolean relative(int row) throws 
SQLException
di chuyển đến hàng cách row hàng từ vị
trí hiện tại, nếu row dương thì di chuyển 
về cuối ResultSet và ngược lại 
public boolean previous() throws 
SQLException
di chuyển đến hàng đứng phía trước
public boolean next() throws SQLException di chuyển đến hàng tiếp theo
public int getRow() throws SQLException trả lại vị trí hàng mà con trỏ đang chỉ đến
public void moveToInsertRow() throws 
SQLException
di chyển đến 1 hàng mới để chèn dữ liệu. 
Vị trí hiện tại sẽ được lưu lại
public void moveToCurrentRow() throws 
SQLException
di chuyển về lại vị trí cũ nếu con trỏ 
đang chỉ đến vị trí hàng vừa được chen
 Các phương thức lấy dữ liệu trong ResultSet
• getXXX(String columnName) throws 
SQLException
• getXXX(int columnIndex) throws SQLException
XXX: là kiểu tương ứng của dữ liệu
columnName: tên của cột trong ResultSet
columnIndex: chỉ số của cột trong ResultSet, bắt đầu 
từ 1
29/25
 Bước 4: Xử lý kết quả trả về
 Các phương thức cập nhật dữ liệu
• Cập nhật dữ liệu trong ResultSet
 public void updateXXX(int columnIndex, XXX s) throws 
SQLException
 public void updateXXX(String columnName, XXX s) 
throws SQLException
• Cập nhật dữ liệu từ ResultSet đến Database
30/25
 Bước 4: Xử lý kết quả trả về
public void updateRow() Cập nhật các thay đổi của hàng hiện tại trong 
ResultSet đến Database
public void deleteRow() Xóa hàng hiện tại trong Database
public void refreshRow() Lấy dữ liệu trong Database vào ResultSet 
public void cancelRowUpdates() Hủy bỏ các thay đổi dữ liệu vừa được thực hiện
public void insertRow() Chèn dữ liệu trong hàng hiện tại của ResultSet vào 
Database
 Sử dụng phương thức close()
 Ví dụ
rs.close(); 
stmt.close(); 
conn.close();
31/25
 Bước 5: Đóng kết nối
 Transaction: là một khối các thao tác cần được 
thực hiện tương ứng với nhau. 
 Kết nối JDBC mặc định ở chế độ auto-commit: 
mỗi câu lệnh SQL được hoàn thành riêng lẻ
 Một transaction sẽ được bắt đầu khi chấm dứt 
chế độ auto-commit và kết thúc khi đối tượng 
kết nối thực hiện phương thức commit() 
32/25
Transaction
 Các phương thức
• conn.setAutoCommit(false): tắt chế độ auto-
commit
• conn.commit(): xác nhận các thay đổi đến 
Database và kết thúc transaction
• conn.rollback(): hủy bỏ tất cả các thay đổi trong 
Database từ vị trí bắt đầu transaction
33/25
Transaction