Viết tắt của Java Database Connectivityapplication đến Database • 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
Trang 2 Giới thiệu về JDBC
Nội dung
Trang 3 Viết tắt của Java Database Connectivity
application đến Database
• 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
Trang 4 JDBC hỗ trợ 2 loại truy cập dữ liệu
Cấu trúc của JDBC
Trang 7 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
Trang 9 JDBC driver loại 1: JDBC-ODBC
9/25
Cấu trúc của JDBC
Trang 10 JDBC driver loại 2: Native API
Cấu trúc của JDBC
Trang 11 JDBC driver loại 3: Net pure Java
11/25
Cấu trúc của JDBC
Trang 12 JDBC driver loại 4: 100% pure Java
Cấu trúc của JDBC
Trang 13 Bước 1: Thiết lập kết nối Database
13/25
Các bước sử dụng JDBC
Trang 14 Nạp các java package: sử dụng câu lệnh import
Trang 16 Xác định Database URL
• Được sử dụng để tạo kết nối đến Database
• Có thể chứa server, port, protocol…
Bước 1: Thiết lập kết nối Database
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port
Trang 17 Ví dụ
• SQL SERVER:
“jdbc:sqlserver://myserver:1433;databasename=Library”;
• Oracle thin driver
“jdbc:oracle:thin:@machinename:1521:dbname”
17/25
Bước 1: Thiết lập kết nối Database
Trang 18 Tạo đối tượng kết nối Connection: sử dụng 1
• Chú ý: ném ra ngoại lệ SQLException
Bước 1: Thiết lập kết nối Database
Trang 19Properties info = new Properties( );
info.put( "user", “sa" );
Trang 20 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ụ:
Bước 2: Tạo câu lệnh truy vấn
Trang 21• 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 (?, ?)}";
Trang 23 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
con trỏ của ResultSet
23/25
Bước 4: Xử lý kết quả trả về
Trang 24 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
Bước 4: Xử lý kết quả trả về
Trang 25 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ề
Trang 26 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
Bước 4: Xử lý kết quả trả về
Trang 27 Ví dụ
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
• 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ề
Trang 28 Các phương thức di chuyển con trỏ
public boolean absolute(int row) throws
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
Trang 29 Các phương thức lấy dữ liệu trong ResultSet
• getXXX(String columnName) throws SQLException
• getXXX(int columnIndex) throws SQLExceptionXXX: là kiểu tương ứng của dữ liệu
columnName: tên của cột trong ResultSetcolumnIndex: 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ề
Trang 30 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
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
Trang 32 Transaction: là một khối các thao tác cần được thực hiện tương ứng với nhau
mỗi câu lệnh SQL được hoàn thành riêng lẻ
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()
Transaction
Trang 33• conn.rollback(): hủy bỏ tất cả các thay đổi trong
Database từ vị trí bắt đầu transaction
33/25
Transaction