Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แสดงข้อมูลตาราง MySQL ด้วย Java (JDBC ResultSet)

Java JDBC: เชื่อมต่อ MySQL และ Query

Dependency (Maven/Gradle)



    mysql
    mysql-connector-j
    8.0.33

ตัวอย่างตาราง demo87

CREATE TABLE demo87 (name VARCHAR(20), age INT);
INSERT INTO demo87 VALUES ('John',21), ('David',23), ('Bob',22);

Java Code: TableValuesDemo.java

import java.sql.*;
import java.util.*;

public class TableValuesDemo {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/sampledatabase";
        String user = "root";
        String password = "123456";
        
        String sql = "SELECT * FROM demo87";
        
        try (Connection con = DriverManager.getConnection(url, user, password);
             Statement stmt = con.createStatement();
             ResultSet rs = stmt.executeQuery(sql)) {
            
            Map<String, Integer> map = new HashMap<>();
            
            while (rs.next()) {
                String name = rs.getString("name");
                int age = rs.getInt("age");
                map.put(name, age);
            }
            
            System.out.println(map);
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

ผลลัพธ์

{Bob=22, John=21, David=23}

คำอธิบายโค้ดสำคัญ

Class/Methodหน้าที่
DriverManager.getConnection()สร้าง Connection ไป MySQL
con.createStatement()สร้าง Statement สำหรับ Execute Query
stmt.executeQuery(sql)รัน SELECT คืน ResultSet
rs.next()เลื่อน Cursor ไปแถวถัดไป (true/false)
rs.getString("col")อ่านค่า String จากคอลัมน์
rs.getInt("col")อ่านค่า Integer จากคอลัมน์

Best Practices (Modern Java)

  • Try-with-resources: ปิด Connection, Statement, ResultSet อัตโนมัติ (Java 7+)
  • PreparedStatement: ใช้แทน Statement สำหรับ Query ที่มี Parameter
  • Connection Pool: ใช้ HikariCP (Spring Boot Default) แทนสร้าง Connection ใหม่ทุกครั้ง
  • Column Index vs Name: rs.getString(1) เร็วกว่า rs.getString("name") แต่ชื่ออ่านง่ายกว่า

PreparedStatement Version

String sql = "SELECT name, age FROM demo87 WHERE age > ?";
try (PreparedStatement ps = con.prepareStatement(sql)) {
    ps.setInt(1, 20);
    try (ResultSet rs = ps.executeQuery()) {
        while (rs.next()) {
            System.out.println(rs.getString("name") + " - " + rs.getInt("age"));
        }
    }
}

Common Errors

Errorแก้ไข
ClassNotFoundException: com.mysql.jdbc.DriverDriver Class เก่า ใช้ com.mysql.cj.jdbc.Driver (MySQL 8.0+)
Communications link failureMySQL Down, Wrong Host/Port, Firewall
Access deniedUser/Password ผิด, Host ไม่ Match (localhost vs %)
No suitable driverJar ไม่อยู่ใน Classpath