Java GUI Search Data from Database |
Java GUI Search Data from Database หัวข้อนี้จะเป็นตัวอย่างการเขียน Java GUI เพื่อติดต่อกับฐานข้อมูล Database และทำการ Search ค้นหารายการข้อมูลจาก Table มาแสดงในหน้า JTable สำหรับหลักการนั้น จะใช้การสร้าง Frame ที่ประกอบด้วย Text Field , Button และ JTable โดย Text Field มีหน้าที่รับ Input หลังจากได้ค่าแล้วค่อยนำไปค้นหาใน Database พร้อมกับเอาผลลัพธ์ที่ได้แสดงใน JTable
Java GUI Search Data from 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 และข้อมูลได้ทันที
กลับมาที่ Java Project ให้สร้างหน้าตา Frame ดังนี้ (สามารถ Apply ได้ทั้ง Eclipse และ Netbeans)
สร้าง Text Field , Button และ JTable และกำหนดชื่อดังรูป
สร้าง Event ให้กับ Button
Add event handler -> action -> actionPerformed
ออกแบบโครงสร้างและ Method ดังนี้
public class MyForm extends JFrame {
private JTextField txtKeyword;
private 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() {
// Bind and Popuplate Data
PopulateData();
}
private void PopulateData() {
}
}
เป็นโครงสร้างเหมาะสำหรับการ เรียก Method ทุก ๆ ครั้งเมื่อมีการคลิกที่ค้นหาข้อมูล โดยเราจะสร้าง Method ชื่อว่า PopulateData() ไว้สำหรับการติดต่อกับฐานข้อมูล
String sql = "SELECT * FROM customer " +
"WHERE Name like '%" + txtKeyword.getText() + "%' " +
"ORDER BY CustomerID ASC";
การค้นหาข้อมูลใน SQL
Code ทั้งหมด
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.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyForm extends JFrame {
private JTextField txtKeyword;
private 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, 580, 242);
setTitle("ThaiCreate.Com Java GUI Tutorial");
getContentPane().setLayout(null);
// ScrollPane
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(65, 72, 440, 89);
getContentPane().add(scrollPane);
// Table
table = new JTable();
scrollPane.setViewportView(table);
// Label Search
JLabel lblSearch = new JLabel("Search Data");
lblSearch.setBounds(101, 27, 84, 14);
getContentPane().add(lblSearch);
// Keyword
txtKeyword = new JTextField();
txtKeyword.setBounds(195, 24, 160, 20);
getContentPane().add(txtKeyword);
txtKeyword.setColumns(10);
// Button Search
JButton btnSearch = new JButton("Search");
btnSearch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// Bind new Data.
PopulateData();
}
});
btnSearch.setBounds(365, 23, 79, 23);
getContentPane().add(btnSearch);
// Bind and PopulateData
PopulateData();
}
private 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 " +
"WHERE Name like '%" + txtKeyword.getText() + "%' " +
"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++;
}
rec.close();
} 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();
}
}
}
แสดงรายการข้อมูล
เมื่อคลิกที่ค้นหาข้อมูลที่ต้องการ
กรณีที่ใช้ร่วมกับ Database อื่น ๆ สามารถดูวิธีการใช้ Connector และ Connection String ได้ที่นี่
Property & Method (Others Related) |
|