Lập trình Java Swing và JDBC (Bài 5)

Lập trình Java Swing và JDBC (Bài 5)

lap-trinh-java-swing-va-jdbc-1
Lập trình cơ sở dữ liệu

Lập trình Java Swing và JDBC (Bài 5)

Sản phẩm lập trình java swing và jdbc là những ứng dụng có sự kiết hợp giữa thư viện Swing và JDBC cho phép người dùng thao tác với ứng dụng thông qua giao diện đồ hoạ (GUI) và quản lý dữ liệu thông qua JDBC.

VÍ dụ những chương trình quản lý bán hàng, quản lý siêu thị, quản lý đào tạo, …thì phần giao diện được thiết kế bằng cách sử dụng Swing và phần cơ sở dữ liệu sẽ sử dụng JDBC và một hệ quản trị cơ sở dữ liệu như MySQL, SQL Server hay Oracle, …

Lập trình java swing và jdbc – Một số chương trình mẫu

Chuẩn bị cơ sở dữ liệu (Cơ sở dữ liệu này được tạo với MS SQL Server)

CREATE DATABASE Library
USE
Library
GO
CREATE TABLE Books (
 ID INT IDENTITY PRIMARY KEY
 ,title NVARCHAR(50)
 ,price FLOAT 
)
GO
INSERT INTO Books (title, price) VALUES (N'Lập trình C',100)
INSERT INTO Books (title, price) VALUES (N'Lập trình Java',200)
INSERT INTO Books (title, price) VALUES (N'Lập trình C#',150)
GO

Lập trình java swing và jdbc – Chương trình 1: Tìm kiếm và xoá dữ liệu

Cho phép người dùng xem và xoá dữ liệu của bảng Books. Ngoài ra chương trình cũng cho phép người dùng tìm kiếm một sách theo tiêu đề (title).

Mô tả yêu cầu

Đối với nút “Search” nếu vùng filter không nhập, chương trình sẽ hiển thị tất cả dữ liệu của bảng Books. Ngược lại chương trình chỉ hiển thị đúng với thông tin mà người dùng đã nhập hoặc ứng dụng sẽ thông báo “The book is not available!” trong trường hợp không tìm thấy.

Khi người dùng chọn một dòng trên table, nút “Delete” sẽ ở trạng thái sử dụng và chương trình sẽ hiển thị thông báo xác nhận “Do you want to delete?” khi người dùng chọn nút “Delete”. Nếu chọn “Yes“, chương trình sẽ xoá thông tin sách được chọn khỏi cơ sở dữ liệu.

Nút “Exit” sẽ đóng chương trình

Viết xử lý cho nút “Search”

Bước 1: Khai báo tiêu đề và model cho Table

private String header[] = {"Id", "Title", "Price"};
private DefaultTableModel tblModel = new DefaultTableModel(header, 0);

Bước 2: Truy xuất dữ liệu của bảng Books

Connection conn = null;
Statement st = null;
ResultSet rs = null;

try { 
 conn = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Library", "sa", "sa");
 // Câu lệnh xem dữ liệu
 String sql = "select * from Books ";
 // Nếu tìm kiếm theo title
 if (txtTitle.getText().length() > 0) {
   sql = sql + " where title like '%" + txtTitle.getText() + "%'";
 }
 // Tạo đối tượng thực thi câu lệnh Select
 st = conn.createStatement();
 // Thực thi 
 rs = st.executeQuery(sql);
 Vector data = null;
 tblModel.setRowCount(0);
 // Nếu sách không tồn tại
 if (rs.isBeforeFirst() == false) {
  JOptionPane.showMessageDialog(this, "The book is not available!");
  return;
 }
 // Trong khi chưa hết dữ liệu
 while (rs.next()) {
   data = new Vector();
   data.add(rs.getInt("id"));
   data.add(rs.getString("title"));
   data.add(rs.getString("price"));
   // Thêm một dòng vào table model
   tblModel.addRow(data);
 }
 jTable1.setModel(tblModel); // Thêm dữ liệu vào table
} catch (Exception e) {
  e.printStackTrace();
} finally {
  try {
    if (conn != null) {
      conn.close();
    }
    if (st != null) {
     st.close();
    }
    if (rs != null) {
     rs.close();
    }
   } catch (Exception ex) {
     ex.printStackTrace();
   }
}

Viết xử lý cho nút “Delete”

Trước khi xoá dữ liệu, người dùng phải chọn một dòng trên table và chương trình sẽ lấy giá trị của cột đầu tiên của dòng được chọn để làm điều kiện xoá (cột id)

int ret = JOptionPane.showConfirmDialog(this, "Do you want to delete?", "Confirm", JOptionPane.YES_NO_OPTION);
if(ret != JOptionPane.YES_OPTION) {
 return;
}
Connection c = null;
PreparedStatement ps = null;
try {
 c = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Library", "sa", "sa");
 ps = c.prepareStatement("Delete From Books where id = ?");
 ps.setInt(1, id); //giá trị của cột đầu tiên tại dòng được chọn trong table
 ret = ps.executeUpdate();
 if (ret != -1) {
  JOptionPane.showMessageDialog(this, "This book has been deleted");  
 }
} catch (Exception ex) {
 ex.printStackTrace();
} finally {
  try {
   if (c != null) {
     c.close();
   }
   if (ps != null) {
     ps.close();
   }
 } catch (Exception ex2) {
   ex2.printStackTrace();
 }
}

Lập trình java swing và jdbc – Chương trình 2: Cập nhật tiêu đề và giá của sách dựa vào id

Giao diện chương trình

Khi người dùng chọn id từ combobox, chương trình sẽ hiển thị thông tin của title và price tương ứng vào các textfield. Dữ liệu sẽ được cập nhật khi người dùng chọn nút “Save

Viết xử lý hiển thị dữ liệu cho combobox

Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
 conn = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Library", "sa", "sa");
 st = conn.createStatement();
 rs = st.executeQuery("select id from books ");
 Vector data = new Vector();
 while (rs.next()) {
   data.add(rs.getString("id"));
 }
 cmbModel = new DefaultComboBoxModel(data);
 cmbCondition.setModel(cmbModel);
} catch (Exception e) {
 e.printStackTrace();
} finally {
 try {
   if (conn != null) {
     conn.close();
   }
  if (st != null) {
    st.close();
 }
  if (rs != null) {
    rs.close();
  }
 } catch (Exception ex) {
  ex.printStackTrace();
 }
}

Đăng ký và xử lý sự kiện cho combobox

Đăng ký sự kiện: chuột phải combobox -> chọn Events -> chọn Action -> chọn actionPerformed

Viết xử lý

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
 conn = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Library", "sa", "sa"); 
 id = Integer.parseInt((String) cmbCondition.getSelectedItem());
 String sql = "Select * from books where id = ?";
 ps = conn.prepareStatement(sql); 
 ps.setInt(1, id);
 rs = ps.executeQuery();
 if (rs.next()) {
  //Hiển thị dữ liệu vào các textfield
  txtTitle.setText(rs.getString("title"));
  txtPrice.setText(rs.getString("price"));
 } 
} catch (Exception e) {
 e.printStackTrace();
} finally {
 try {
  if (conn != null) {
   conn.close();
  }
  if (rs != null) {
   rs.close();
  }
  if (ps != null) {
   ps.close();
  }
 } catch (Exception ex2) {
   ex2.printStackTrace();
 }
}

Viết xử lý cho nút “Save”

int ret = JOptionPane.showConfirmDialog(this, "Do you want to update?", "Confirm", JOptionPane.YES_NO_OPTION);
if (ret != JOptionPane.YES_OPTION) {
 return;
}
String update = "update books set title = ?, price = ? where id = ?";
System.out.println(update);
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
 conn = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Library", "sa", "sa");
 ps = conn.prepareStatement(update);
 ps.setString(1, txtTitle.getText());
 ps.setFloat(2, Float.parseFloat(txtPrice.getText()));
 ps.setInt(3, id); //id được chọn từ combobox
 ret = ps.executeUpdate();
 if (ret != -1) {
   lblStatus.setText("The book has been updated");
 }
} catch (Exception e) {
 e.printStackTrace();
} finally {
 try {
  if (conn != null) {
   conn.close();
  }
  if(rs != null) {
   rs.close();
  }
  if (ps != null) {
   ps.close();
  }
 } catch (Exception ex2) {
  ex2.printStackTrace();
 }
}

Lập trình java swing và jdbc – Chương trình 3: Thêm dữ liệu

Giao diện chương trình

lap trinh java swing va jdbc 5

Xử lý cho nút “Save”

// Nếu không nhập tiêu đề (Title)
if (txtTitle.getText().isEmpty()) {
 JOptionPane.showMessageDialog(this, "Please input title");
 txtTitle.requestFocus();
 return; // Thoát khỏi xử lý không thực hiện các lệnh tiếp theo
}
 // Nếu không nhập giá (Price)
if (txtPrice.getText().isEmpty()) {
 JOptionPane.showMessageDialog(this, "Please input price");
 txtPrice.requestFocus();
 return;
}
 // Hiển thị hộp thoại xác nhận có muốn lưu hay không?
 int ret = JOptionPane.showConfirmDialog(this, "Do you want to save?", "Confirm", JOptionPane.YES_NO_OPTION);
 // Trường hợp không lưu
 if (ret != JOptionPane.YES_OPTION) {
 return; // Thoát khỏi phương thức
 }
 // Câu lệnh insert
 String insert = "insert into books (title,price) values(?, ?)";
 System.out.println(insert);
 Connection conn = null;
 PreparedStatement ps = null;
 try {
  conn = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Library", "sa", "sa");
  ps = conn.prepareStatement(insert);
  ps.setString(1, txtTitle.getText());
  ps.setFloat(2, Float.parseFloat(txtPrice.getText()));
  // Thực thi câu lệnh insert
  ret = ps.executeUpdate();
  if (ret != -1) {
    lblStatus.setText("The book has been inserted");
  }
 } catch (Exception e) {
   e.printStackTrace();
 } finally {
   try {
    if (conn != null) {
     conn.close();
    }
    if (ps != null) {
     ps.close();
    }
   } catch (Exception ex2) {
    ex2.printStackTrace();
   }
}

Lập trình java swing và jdbc – Tổng kết

Thiết kế giao diện với Java Swing Lập trình cơ sở dữ liêu với JDBC

Lập trình java swing và jdbc – Bài tập thực hành

Bài thực hành số 1: Viết chương trình cho phép quản lý thông tin lớp học

Giao diện

lap trinh java swing va jdbc 6
Màn hình 1

Viết xử lý

Khi người dùng chọn nút lệnh “Display”, hiển thị thông tin từ bảng ClassTbl vào JTable. Nếu người dùng nhập tên lớp tại “Class name”, chương trình sẽ hiển thị thông tin về lớp đã được nhâp.

Chương trình cũng cho phép cập nhật lại thông tin lớp bằng cách chọn một dòng tại JTable và nhập thông tin thay đổi tại “Class Name” , sau đó chọn nút lệnh “Update” để hoàn tất.

Để xóa thông tin, người dùng sẽ chọn một dòng muốn xóa tại JTable và chọn nút lệnh “Delete

Khi người dùng chọn nút lệnh “Insert”, chương trình sẽ hiển thị màn hình thêm thông tin lớp học.

lap trinh java swing va jdbc 7

Màn hình 2

Bài thực hành số 2: Tại màn hình thêm thông tin lớp hớp học (Màn hình 2)

Khi người dùng chọn nút lệnh “Save”, lưu thông tin lớp học.

Lưu ý kiểm tra thông tin “Class ID” đã tồn tại hay chưa? Khi người dùng chọn nút lệnh “Close”, quay về màn hình 1

[contact-form-7 id=”7805″ title=”Form liên hệ 1″]
Alert: You are not allowed to copy content or view source !!