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) | 
                 
               
			   
			  			  
			  			  
			  			  
			  			  
			  			  
			  			  
			  			  
			              
  | 
           
          
            
			  ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท 
              | 
           
          
 
       
		 
					
        
          
            
                
                   | 
                 
                
                  |   | 
                  By :  | 
                  ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)  | 
                 
                
                  |   | 
                  Score Rating :  | 
                  
				     				   | 
                    | 
                 
                
                  |   | 
                  Create/Update Date :  | 
                  
                    2013-09-06 17:11:47            /
            2017-03-27 21:46:17 | 
                 
				
				
				                
                  |   | 
                  Download :  | 
                   
				 No files				   | 
                 
				              | 
           
         
		
      
         
           
            
            
              
                | 
               
                   Sponsored Links / Related |  
              | 
         
        
                        | 
          
		  
		   | 
         
         
          |             
		  
	
      
     | 
     
 
 
		  
         | 
		
          
		   
		  
              
      
     |