Lê đình Thanh, Ứng dụng CSDL Nội dung Ớ Mô hình ứng dụng CSDL Ớ Sử dụng JavaDB 4 Mô hình ứng dụng CSDL Ớ JDBCJava Database Connectivity cung cấp các ựối tượng logic: kết nối, lệnh, và
Trang 1Lê đình Thanh, Ứng dụng CSDL
Lê đình Thanh
Bộ môn Mạng và Truyền thông Máy tắnh Khoa Công nghệ Thông tin Trường đại học Công nghệ, đHQGHN
Bài giảng
LẬP TRÌNH JAVA
Ứng dụng CSDL
Bài 7
Trang 2Lê đình Thanh, Ứng dụng CSDL
Nội dung
Ớ Mô hình ứng dụng CSDL
Ớ Sử dụng JavaDB
4
Mô hình ứng dụng CSDL
Ớ JDBC(Java Database
Connectivity) cung cấp các ựối
tượng logic: kết nối, lệnh, và
kết quả truy vấn; ựược thiết kế
ựể chạy ựộc lập với HQT
CSDL
Ớ Connectornhận lệnh của
JDBC, dịch thành lệnh của
HQT CSDL và truyền (qua
mạng) cho HQT CSDL; nhận
kết quả từ HQT CSDL và
truyền cho JDBC
Ớ HQT CSDLkhác nhau về cách
tiếp nhận và xử lý lệnh, cũng
như trả kết quả Vì vậy, ứng
với mỗi HQT CSDL, các
driver/connector tương ứng
phải ựược sử dụng
JDBC
Ứng dụng Java
DB Connector/ Driver
Hệ quản trị CSDL
Trang 3Lê đình Thanh, Ứng dụng CSDL
Các bước
Ớ Nhập gói sql
Ớ Chọn driver
Ớ Kết nối CSDL
Ớ Thao tác CSDL
Ờ Tạo ựối tượng lệnh
Ờ Thực hiện cập nhật
Ờ Tạo ựối tượng kết quả
Ờ Thực hiện truy vấn
Ờ Sử dụng kết quả truy vấn
Ớ đóng kết nối
Nhập gói sql
Ớ Gói java.sql bao gồm các lớp cho thao tác CSDL, vì vậy cần nhập các lớp trong gói này vào ứng dụng CSDL
import java.sql.*; //nhập tất cả các lớp
//hoặc chỉ nhập các lớp ựược dùng
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
Trang 4Lê đình Thanh, Ứng dụng CSDL
Chọn driver
Ớ Class.forName(driverName);
HQT CSDL driverName
MySQL com.mysql.jdbc.Driver
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver
Derby org.apache.derby.jdbc.EmbeddedDriver JavaDB org.apache.derby.jdbc.EmbeddedDriver Oracle sql.oracle.OracleDriver
ODBC sun.jdbc.odbc.JdbcOdbcDriver PostgreSQL org.postgresql.Driver
8
Chọn driver
Ớ Nếu driver ựược cung cấp ở dạng thư viện (.jar), chúng ta phải nhập thư viện này vào chương trình.
Ờ Trong cửa sổ Projects, bấm phải chuột vào Libraries của dự án ựang phát triển, chọn Add JAR/Folder Ầ, chọn tệp jar cần nhập rồi chọn Open.
Ớ Vắ dụ, nếu sử dụng JavaDB, chúng ta cần derby driver, do vậy phải nhập derby.jar hay
derbyclient.jar trong thư mục Program
Files\Sun\JavaDB\lib
Trang 5Lê đình Thanh, Ứng dụng CSDL
Kết nối CSDL
Ớ Connection conn =
DriverManager.getConnection(dburl, username, password);
trong ựó dburl là ựịa chỉ và tên CSDL, có dạng
Ộjdbc:xxx://IP:port//dbỢ, xxx phụ thuộc vào HQT CSDL, db là tên CSDL
Derby, JavaDB derby
Cập nhật dữ liệu
Ớ Statement stmt = conn.createStatement();
Ớ int nor = stmt.executeUpdate(sql);
sql là lệnh update, insert, delete, alter, Ầ của SQL Hàm trả về số bản ghi ựược cập nhật.
Vắ dụ:
stmt.executeUpdate(Ộupdate Sinhvien set
hoten=\ỔTrần Nguyên\Ỗ where masv=\Ỗ1\ỖỢ);
Trang 6Lê đình Thanh, Ứng dụng CSDL
Truy vấn dữ liệu
Ớ Statement stmt = conn.createStatement();
Ớ ResultSet rs = stmt.executeQuery(Ộselect Ầ
Ợ);
Vắ dụ:
ResultSet rs = stmt.executeQuery(Ộselect * from Sinhvien where gioitinh=\ỖM\ỖỢ);
12
Truy vấn dữ liệu (tiếp)
Ớ ResultSet
Ờ lưu kết quả truy vấn dưới dạng danh sách các bản ghi với một con trỏ di chuyển ựược ban ựầu trỏ về ựầu danh sách (trước bản ghi ựầu tiên)
Ờ cung cấp các phương thức ựể duyệt danh sách Ờ di chuyển con trỏ
Ớ next()Ờ chuyển sang bản ghi kế tiếp và trả về true nếu còn bản ghi phắa sau, ngược lại trả về false
Ớ previous(), fist(), last(), beforeFirst(), afterLast().
1
-Trần Nguyên
-M
2 -Tân Thị Trang -F
97 -Trịnh Tấn -M
con trỏ cho biết Bản ghi hiện tại
next
Trang 7Lê đình Thanh, Ứng dụng CSDL
Truy vấn dữ liệu (tiếp)
Ớ ResultSet
Ờ và các phương thứcgetXXX(tên_trường)ựọc giá trị
từng trường của bản ghi hiện tại Ờ ựang ựược trỏ bởi con trỏ, với XXX là kiểu dữ liệu của trường
Ờ Vắ dụ
Ớ rs.getInt(ỘmasvỢ) => 2
Ớ rs.getString(ỘhotenỢ) => ỘTân Thị TrangỢ
Ớ rs.getChar(ỘgioitinhỢ) => ỔFỖ
1
-Trần Nguyên
-M
2 -Tân Thị Trang -F
97 -Trịnh Tấn -M
con trỏ cho biết Bản ghi hiện tại
next
Truy vấn dữ liệu (tiếp)
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(Ộselect Ầ Ợ);
while (rs.next())
{
int ma = rs.getInt(ỘmasvỢ);
String ht = rs.getString(ỘhotenỢ);
Char gt = rs.getChar(ỘgioitinhỢ);
System.out.println(ma + Ộ\tỢ + ht + Ộ\tỢ + gt);
}
}catch(Exception excp) {
System.out.println(ỘLoi truy vanỢ);
}
Các lệnh thao tác CSDL có thể gây ngoại
lệ, vì vậy cần
ựược bắt và
xử lý
Trang 8Lê đình Thanh, Ứng dụng CSDL
Lệnh ựược chuẩn bị trước
Ớ PreparedStatement ựược dùng thay Statement ựể
tăng tốc ựộ xử lý
Ờ Cấu trúc lệnh sql ựược cung cấp trước cho
PreparedStatement như một hàm ựược dịch trước Ờ Cung cấp các tham số cho PreparedStatement trước khi thực thi như gọi hàm
PreparedStatement pstmt = con.preparedStatement("UPDATE Sinhvien SET hoten = ? WHERE masv= ? ");
pstmt.setStringt(1, ỘTôn Nhất đạiỢ);
pstmt setString(2, 14);
pstmt.executeUpdate();
16
Sử dụng stored procedure
PreparedStatement dùng ựể triệu gọi các stored procedure của CSDL nhằm tăng tốc ựộ xử lý ở cả DB Server và chương trình
CallableStatement cs = conn.prepareCall("{call
ALL_STUDENT}");
ResultSet rs = cs.executeQuery();
Trang 9Lê đình Thanh, Ứng dụng CSDL
Sử dụng giao tác
Ớ Giao tác (transaction) ựược sử dụng ựể ựảm bảo tắnh toàn vẹn của dữ liệu
Ờ Một giao tác thường bao gồm nhiều lệnh
Ờ Khi giao tác ựược xác nhận (commit), tất cả các lệnh thuộc giao tác có hiệu lực
Ờ Nếu giao tác bị hủy bỏ (rollback), tất cả các lệnh
ựều không ựược thực hiện
Ờ Giao tác = tập các lệnh hoặc cùng ựược thực hiện hoặc cùng không ựược thực hiện
Ớ Hỏi: Vì sao giao tác ựể ựảm bảo tắnh toàn vẹn của dữ liệu? Cho vắ dụ.
Sử dụng giao tác
conn.setAutoCommit(false);
PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
updateSales.setInt(1, 50);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
PreparedStatement updateTotal = con.prepareStatement("UPDATE COFFEES SET TOTAL = TOTAL + ? WHERE COF_NAME LIKE
?");
updateTotal.setInt(1, 50);
updateTotal.setString(2, "Colombian");
updateTotal.executeUpdate();
conn.commit();
conn.setAutoCommit(true);
Hỏi: Cơ chế thực hiện giao tác?
Trang 10Lê đình Thanh, Ứng dụng CSDL
Sử dụng giao tác
con.setAutoCommit(false);
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) VALUES " + "(?FIRST?)");
Savepoint svpt1 = conn.setSavepoint("SAVEPOINT_1");
rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) " + "VALUES (?SECOND?)");
conn.rollback(svpt1);
Ầ.
con.commit();
con.setAutoCommit(true);
20
Tạo CSDL JavaDB
Trang 11Lê đình Thanh, Ứng dụng CSDL
Tạo CSDL JavaDB (tiếp)
Kết nối CSDL JavaDB
Trang 12Lê đình Thanh, Ứng dụng CSDL
Tạo bảng
24
Tạo bảng (tiếp)
Trang 13Lê đình Thanh, Ứng dụng CSDL
Chạy lệnh SQL
Chạy lệnh SQL (tiếp)
Trang 14Lê đình Thanh, Ứng dụng CSDL
Chạy lệnh SQL (tiếp)
28
Tạo view
Trang 15Lê đình Thanh, Ứng dụng CSDL
Tạo view (tiếp)
Tiếp theo
Tạo giao diện ựồ họa