Java GUI Delete data in Database |
Java GUI Delete data in Database บทความนี้จะเป็นการเขียน Java GUI เพื่อ ลบ Delete ข้อมูลใน Database โดยขั้นตอนก็คือ จะออกแบบ Frame และ JTable ทำการอ่านข้อมูลจาก Database มาแสดงใน JTable จากนั้นเราสามารถที่จะคลิกเลือกที่ Rows ของ JTable เพื่อทำการ Delete ข้อมูล และก่อนที่จะทำการ Delete จะมี Confirm Dialog เพื่อยืนยันการลบข้อมูล
Java GUI Delete data in Database
ในตัวอย่างนี้จะเลือกใช้ Database ของ MySQL แต่ในกรณีที่จะใช้ร่วมกับ Database อื่น ๆ ก็สามารถทำได้ง่าย ๆ เพียงแค่เปลี่ยน Connector และ Connection String เท่านั้น และการแสดงข้อมูลจะใช้ JTable ของ Java Swing สามารถอ่านเพิ่มเติมได้ที่บทความนี้
Java Connect to MySQL Database (JDBC)
Java Table (JTable) - Swing Example
Java GUI Retrieve List Data from Database
โครงสร้างของ MySQL และ Table
CREATE TABLE `customer` (
`CustomerID` varchar(4) NOT NULL,
`Name` varchar(50) NOT NULL,
`Email` varchar(50) NOT NULL,
`CountryCode` varchar(2) NOT NULL,
`Budget` double NOT NULL,
`Used` double NOT NULL,
PRIMARY KEY (`CustomerID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- dump ตาราง `customer`
--
INSERT INTO `customer` VALUES ('C001', 'Win Weerachai', '[email protected]', 'TH', 1000000, 600000);
INSERT INTO `customer` VALUES ('C002', 'John Smith', '[email protected]', 'UK', 2000000, 800000);
INSERT INTO `customer` VALUES ('C003', 'Jame Born', '[email protected]', 'US', 3000000, 600000);
INSERT INTO `customer` VALUES ('C004', 'Chalee Angel', '[email protected]', 'US', 4000000, 100000);
คำสั่งของ SQL ที่สามารถนำไปรัน Query เพื่อสร้าง Table และ Data ได้ทันที
กลับมายัง Java Project ออกแบบหน้าจอ Layout ดังรูป
ประกอยด้วย JTable และ Button ในการ Delete ข้อมูล
JButton btnDelete = new JButton("Delete");
btnDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int index = table.getSelectedRow();
if (index < 0) {
JOptionPane.showMessageDialog(null,
"Please select record for Delete!");
} else {
String CustomerID = table.getValueAt(index, 0).toString();
Object[] options = { "Yes", "No" };
int n = JOptionPane.showOptionDialog(null,
"Do you want to Delete data?",
"Confirm to Delete?",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options,
options[1]);
if (n == 0) // Confirm Delete = Yes
{
DeleteData(CustomerID); // Delete Data
PopulateData(); // Reload Table
}
}
}
});
ปุ่ม Button สำหรับการ Delete ข้อมูล ซึ่งจะสร้าง Method ไว้สำหรับการ Delete ข้อมูล
เขียน Code ทั้งหมดดังนี้
MyForm.java
package com.java.myapp;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyForm extends JFrame {
static JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyForm frame = new MyForm();
frame.setVisible(true);
}
});
}
/**
* Create the frame.
*/
public MyForm() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 516, 319);
setTitle("ThaiCreate.Com Java GUI Tutorial");
getContentPane().setLayout(null);
// Customer List
JLabel lblCustomerList = new JLabel("Customer List");
lblCustomerList.setBounds(207, 44, 87, 14);
getContentPane().add(lblCustomerList);
// ScrollPane
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(28, 84, 440, 89);
getContentPane().add(scrollPane);
// Table
table = new JTable();
scrollPane.setViewportView(table);
// Button Delete
JButton btnDelete = new JButton("Delete");
btnDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int index = table.getSelectedRow();
if (index < 0) {
JOptionPane.showMessageDialog(null,
"Please select record for Delete!");
} else {
String CustomerID = table.getValueAt(index, 0).toString();
Object[] options = { "Yes", "No" };
int n = JOptionPane.showOptionDialog(null,
"Do you want to Delete data?",
"Confirm to Delete?",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options,
options[1]);
if (n == 0) // Confirm Delete = Yes
{
DeleteData(CustomerID); // Delete Data
PopulateData(); // Reload Table
}
}
}
});
btnDelete.setBounds(192, 203, 89, 23);
getContentPane().add(btnDelete);
PopulateData();
}
private static void PopulateData() {
// Clear table
table.setModel(new DefaultTableModel());
// Model for Table
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addColumn("CustomerID");
model.addColumn("Name");
model.addColumn("Email");
model.addColumn("CountryCode");
model.addColumn("Budget");
model.addColumn("Used");
Connection connect = null;
Statement s = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager
.getConnection("jdbc:mysql://localhost/mydatabase"
+ "?user=root&password=root");
s = connect.createStatement();
String sql = "SELECT * FROM customer ORDER BY CustomerID ASC";
ResultSet rec = s.executeQuery(sql);
int row = 0;
while ((rec != null) && (rec.next())) {
model.addRow(new Object[0]);
model.setValueAt(rec.getString("CustomerID"), row, 0);
model.setValueAt(rec.getString("Name"), row, 1);
model.setValueAt(rec.getString("Email"), row, 2);
model.setValueAt(rec.getString("CountryCode"), row, 3);
model.setValueAt(rec.getFloat("Budget"), row, 4);
model.setValueAt(rec.getFloat("Used"), row, 5);
row++;
}
} catch (Exception e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, e.getMessage());
e.printStackTrace();
}
try {
if (s != null) {
s.close();
connect.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Delete
private void DeleteData(String strCustomerID) {
Connection connect = null;
Statement s = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager
.getConnection("jdbc:mysql://localhost/mydatabase"
+ "?user=root&password=root");
s = connect.createStatement();
String sql = "DELETE FROM customer WHERE " +
"CustomerID = '" + strCustomerID + "' ";
s.execute(sql);
JOptionPane.showMessageDialog(null, "Delete Data Successfully");
} catch (Exception e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, e.getMessage());
e.printStackTrace();
}
try {
if (s != null) {
s.close();
connect.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
Output
แสดงข้อมูลในหน้า Frame บน JTable
กรณีที่ไม่ได้เลือก Record จะมีการแจ้งเตือนให้เลือกข้อมูล
กรณีที่เลือก Rows ที่จะมี Dialog Confirm เพื่อยืนยันการ Delete ข้อมูล
ลบข้อมูลเรียบร้อย
ข้อมูลถูกลบจาก JTable
ข้อมูลใน Database ก็จะถูกลบออกไปจากรายการด้วย
กรณีที่ใช้ร่วมกับ Database อื่น ๆ สามารถดูวิธีการใช้ Connector และ Connection String ได้ที่นี่
Property & Method (Others Related) |
|