ThS. Trần Thị Thanh Nga
Khoa CNTT, Trường ĐH Nông Lâm TPHCM
Email:
Nội dung
Data Access Object (DAO) với Java Database
Connectivity (JDBC).
Các Interface cơ bản trong JDBC
Driver: phần điều khiển
Connection: tham chiếu đến đối tượng kết nối CSDL
Statement: chứa và thực thi câu lệnh SQL
PreparedStatement: chứa và thực thi câu lệnh SQL
(Tạo bởi Connection)
ResultSet: chứa kết quả của việc thực thi câu lệnh
select.
(Tạo bởi việc thực thi Statement hoặc PreparedStatement)
Statement
Tạo Statement:
Connection conn = /* Tạo kết nối Connection*/
Statement stmt = conn.createStatement();
Statement
Thực thi câu lệnh SQL:
Giả sử câu lệnh SQL đưa ra là một câu lệnh insert,
update, hoặc delete:
String sql = /* …………………………*/
int i = stmt.excuteUpdate(sql);
Phương thức excuteUpdate() trả về số dòng được
thêm, cập nhật, hoặc xóa khi thực thi câu lệnh SQL
Statement
Thực thi câu lệnh SQL:
Giả sử câu lệnh SQL đưa ra là một câu lệnh select
String sql = /* …………………………*/
ResultSet rs = stmt.executeQuery(sql);
Phương thức excuteQuery () trả về một tập kết quả
của việc truy suất dữ liệu.
Sau khi thực hiện xong phương thức executeQuery()
thành công, chúng ta sẽ tiến hành kiểm tra và lấy dữ
liệu trong ResultSet thông qua hai phương thức là
next() và getType() (đã học ở Lab 6)
Ví dụ về câu lệnh Insert
Ví dụ về câu lệnh Update
Ví dụ về câu lệnh Delete
Chú ý
Trong Statement: Các tham số điều kiện của SQL phải
gán trực tiếp trong câu chuỗi SQL truyền vào cho
Statement.
Khó quản lý được các tham số truyền vào.
Lồng ghép chuỗi phải chú ý đối với các tham số tương
ứng với kiểu chữ và kiểu số ..v..v..
Sử dụng PreparedStatement để khắc phục những
yếu điểm trên
PreparedStatement
Tạo PreparedStatement:
Connection conn = /* Tạo kết nối Connection*/
Statement prstmt = conn.preparedStatement(sql);
prstmt.setType(index,value);
index bắt đầu từ vị trí từ 1, tương ứng với dấu ? xuất
hiện trong câu lệnh SQL tính từ trái qua.
Type: Kiểu dữ liệu tương ứng với kiểu dữ liệu cần
truyền vào SQL.
PreparedStatement
Tạo PreparedStatement:
Connection conn = /* Tạo kết nối Connection*/
Statement prstmt = conn.preparedStatement(sql);
prstmt.setType(index,value);
index bắt đầu từ vị trí từ 1, tương ứng với dấu ? xuất
hiện trong câu lệnh SQL tính từ trái qua.
Type: Kiểu dữ liệu tương ứng với kiểu dữ liệu cần
truyền vào SQL.
Statement
Thực thi câu lệnh SQL:
Tương tự như Statement, đối với câu lệnh SQL là
Insert, Update, hoặc Delete gọi phương thức
executeUpdate() để lấy được số dòng được thêm, cập
nhập, hoặc xóa . Và gọi phương thức executeQuery() để
lấy ra được tập kết quả của việc thực thi câu lệnh Select.
Lưu ý: Câu lệnh SQL đã truyền vào trong quá trình tạo
PreparedStatement nên không cần truyền lại trong
quá trình thực thi câu lệnh SQL.
VD: Sử dụng PreparedStatement:
Bài tập
Áp dụng vào đề tài mà nhóm đang thực hiện, trình bày
trong buổi báo cáo tiến độ ở tuần tiếp theo.
Yêu cầu: Ít nhất phải làm được 02 chức năng có liên
quan đến phần này.
Step 4
Product.jsp
SmartPhone A233
Xóa
<a href=“DeleteProduct?id=233”> Xóa
</a>
Step 1
Con.java
Static Connection getConnection(){
// Config connect DB
}
Step 3
DeleteProduct.java
doget(…..){
String id = request.getParameter(“id”);
boolean del = Product.delete(id);
if(del){
// Delete Successful
// Delete Object in ListProduct
}else{
Delete failure
}
}
Step 2
Product.java
static boolean delete(int id){
// Declare Connection, call from
Con.getConnnection();
//Delete product in Database
}
VD: Thiết kế chức năng xóa sản phẩm trong CSDL