Ví dụ Savepoint trong JDBC

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 318 - 327)

Phần trước, bạn đã thấy cách sử dụng của phương thức rollbackO đế xóa tất cả các thay đổi và quay trở về trạng thái trước khi ký thác. Với tình huống xảy ra là nếu một lỗi

logic xuất hiện ở gần phần cuối hoặc phần giữa của giao tác, chẳng lẽ bạn phải xóa và bỏ tất cảđể quayvề trạng thái trước đó.Điều này thật lãng phí thời gian và rất vất vả. Bây giờ bạn sử dụng setSavepoint(String ten_cua_savepoint) để định nghĩa một savepoint và khi có lỗi xảy ra ở khu vực savepoint nào, bạn quay về savepoint đó với phương thức rollback (String ten_cua_savepoint). Điều này đem lại cho bạn tiện lợi và nâng cao hiệu suất rất nhiều.

Chương trình 7.15 minh họa cho việc sử dụng savepointtrong JDBC:

Chương trình 7.15

//Buoc 1: Ban can importcacgoi can thiet import java.sql.*;

public class JDBCSavepoint {

// Ten cua driver va dia chi URL cua co so du lieu

static final StringJDBC-DRIVER = "com.mysql.jdbc.Driver";

static final String DB-URL = "jdbc:mysql://localhost/sinhvien";

// Ten nguoi dung va matkhaucua co so du lieu static final String USER = "root";

static final String PASS ="123456";

public static void main(String[] args) { Connection conn = null;

Statement stmt = null;

try{

// Buoc 2: Dang kyDriver

Class.forNamef'com.mysqLjdbc.Driver");

11 Buoc 3: Momot ket noi

System.out.printlnf'Dang ket noi toi co so du lieu...");

conn = DriverManager.getConnection(DB_URL,USER,PASS);

11 Buoc 4: Thietlap auto commitlafalse.

conn.setAutoCommit(false);

// Buoc 5: Thue thitruy van

System.out.printlnf'Tao cac lenh truy van SQL...");

stmt= conn.createStatementf);

// Buoc 6: Liet ketat ca ban ghi co san.

String sql = "SELECT mssv, ho, ten, diemthi FROMsinhvienkóO";

ResultSet rs - stmt.executeQuery(sql);

System.out.printlnf'Liet ke result setde tham chieu...");

printRs(rs);

// Buoc 7: Xoa cac hang co mssv >4

// Chung ta tao savepointtruoc khi thuc hien hoat dong nay.

Savepoint savepointl =conn.setSavepoint("ROWS_DELETED_l");

System.out.println("\nXoa hang...");

StringSQL = "DELETE FROM sinhvienkóO WHERE mssv=3";

stmt.executeưpdate(SQL);

//Oh myGod. Chung ta da xoa saisinhvien!

/1 Buoc 8: Rollback cac thaydoisau save point 2.

conn.rollback(savepointl);

// Buoc 9: Xoa cac hang co mssv >4

// Chung ta tao savepoint truoc khithuc hien hoat dong nay Savepointsavepoint2 = conn.setSavepoint("ROWS_DELETED_2");

System.out.println("\nXoa hang...");

SQL = "DELETE FROM sinhvienkóO WHERE mssv=l";

stmt.executeưpdate(SQL);

// Buoc 10: Liet ke tat ca ban ghi co san.

sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienkóO";

rs = stmt.executeQuery(sql);

System.out.println("\nLiet ke result setde tham chiêu...");

printRs(rs);

// Buoc 10: Don sach moi truong va giaiphong resource rs.closeQ;

stmtcloseQ;

conn.closeQ;

}catch(SQLExceptionse){

// Xu ly cacloi cho JDBC se.printStackTraceQ;

// Neuxuat hien loi thi xoa sach cac thay doi //va tro ve trangthai truoc khi co thaydoi.

System.out.println("\nRollback tai day...");

try{

if(conn!=null) conn.rollbackf);

} catchfSQLException se2) { se2.printStackTrace();

}// Ket thuckhoi try }catch(Exception e){

// Xu ly cac loi choClass.forName e.printStackTraceQ;

} finally!

// Khoi finally duocsu dung de dong cac resource try{

if(stmt!=null) stmtcloseQ;

}catch(SQLException se2){

} try{

if(conn!=null) conn.closef);

}catch(SQLException se){

se.printStackTraceQ;

}// Ket thuc khoi finally }// Ketthuckhoitry }// Ketthuc main

public static voidprintRs(ResultSet rs) throws SQLException{

// Bao dam rang ban bat dau tu hang dau tien rs.beforeFirstf);

while(rs.nextQ){

// Laydu lieuboi sudungten cot int mssv = rs.getlntf'mssv");

int diemthi = rs.getlntf'diemthi");

Stringho = rs.getStringf'ho");

String ten =rs.getStringf'ten");

// Hien thi cac gia tri

System.out.print("\nMSSV:" +mssv);

System.out.print("\nHo:" + ho);

System.out.println("\nTen:" + ten);

System.out.print("\nDiemThi:" + diemthi);

System.out.print("\n=================");

}

}// Ketthuc printRsf) }// Ketthuc JDBCSavepoint

BÀI TẬP

7.1. Cho cơ sờ dữ liệu tên là QLSVvới cấutrúcbảngnhu hình sau.

Sínhvien

Column Name Data Type 1 Length 1 Allow Nulls A

msSV nvarchar 15

hoTen nvarchar 100

email nvarchar 200

diaChi nvarchar 200 ự

msLop nvarchar 15

V

LopHoc

Column Name Data Type 1 Length 1 Allow Nulls

msLop nvarchar 15

tenLop nvarchar 100

giaovienCN nvarchar 100

< ill

Tạo một project bằng ngôn ngữ lập trình java thực hiện các côngviệc sau:

-Kếtnối vớiCSDL và hiểnthị thông tin lên JFrame nhu hình sau:

- Khinhấn nút Thêm:

- Nhấn Hủy hoặc Lưu, sau khi thực hiện sẽ khôi phục giao diện trở lại như ban đầu.

- Khi nhấnnút Sửa:

- Khi nhấn nút “Xem danh sách sinh viên lớp hiện tại, một cửa sổ như sau xuất hiện hiến thị các sinh viên thuộclớp hiệntại đang được chọn:

R THÔNG TIN SINH VIÊN fx |

7.2. Viết chươngtrình quản lý sản phẩm, giao diện như bên dưới:

Bạn đọc tựthiết kế cơ sở dữ liệuhọp lý để thực hiện các yêu cầu sau:

- CSDL gồm có hai bảng: bảng Danh mục và bảng Sảnphẩm.

- Khi chương trình bắt đầu khởi động thì load toàn bộ danh mục sản phẩm vào JList bên trái màn hình và load vào JCombobox bên phải màn hình.

- Khi bấm vào từng danh mục sản phẩm thì hiển thị danh sách các sản phẩm của danh mục đó vào JTable bên phải màn hình.

- Khi chọn từng Sản phẩm trong JTable, chương trình sẽ hiển thị thông tin chi tiết của sản phẩm đó vào mục chi tiết ở góc phải bên dưới màn hình.

- Khi bấm vào nút New bên Danh mục sản phẩm, chương trình sẽ hiển thị cửa sổ cho phép nhập mới một danh mục sảnphẩm vào co sở dữ liệu khi người sử dụng click nútOK:

- Khi bấm vào nút Update bên Danh mục sản phấm, chươngtrình sẽ hiến thị thông tin chi tiết của danh mục đang chọn để cho phép người sử dụng sửa lại tên danh mục:

- Khi bấm nút Remove bên Danh mục sản phấm, chương trình sẽ xóa danh mục sản phẩm đang chọn. Chú ý rằng, nếu Danhmục này đã có sản phẩm bên trong thì phải thông báo cho người sử dụng biết và hòi xem có muốn xóa tất cả luôn hay không.

- Khi bấmnútNew bên phần sản phẩm: xóa trắng các JTextField, cho phép người sử dụng nhập mới 1 sản phấm theo từng danh mục.

- Khi bấm nút Save: chương trình sẽ lưu thông tin cùa sản phẩm. Nếu như mã tồn tạithì tự động update, còn mã chưatồn tại thì thực hiện lưu mới sản phẩm.

- Khi bấm nút Remove bên phần sản phẩm: chương trình sẽ xóa sản phẩm đang chọn trong JTable.

- Menu File: sẽ có hai mục menu con; Menu 1 tên là Printcho phép in ấn toàn bộ danh mục sản phấm và các sàn phấm bên trong danh mục. Menu 2 tên là Exit, cho phép thoátkhỏi chươngtrình.

Chương 8

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 318 - 327)

Tải bản đầy đủ (PDF)

(408 trang)