Lập trình Java cơ bản - Chương 7: Truy cập cơ sở dữ liệu với JDBC

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

pdf33 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 9457 | Lượt tải: 3download
Tóm tắt nội dung Lập trình Java cơ bản - 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 "TẢI VỀ" ở trên
ung
 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

File đính kèm:

  • pdfLập trình Java cơ bản - Chương 7_Truy cập cơ sở dữ liệu với JDBC.pdf
Tài liệu liên quan