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

Java-MySQL: ดึงข้อมูลแค่ 1 แถว (Single Row) ด้วย LIMIT 1

ใช้ LIMIT 1 ในคำสั่ง SQL เพื่อจำกัดผลลัพธ์ให้ได้แค่ 1 แถว แล้วใช้ ResultSet.next() อ่านครั้งเดียวใน Java

ตัวอย่างโค้ด Java เต็มรูปแบบ

1. สร้างตารางและข้อมูลทดสอบใน MySQL

mysql> CREATE TABLE DemoTable (
    Id INT,
    Name VARCHAR(20)
);
Query OK, 0 rows affected (1.37 sec)

mysql> INSERT INTO DemoTable VALUES(101, 'Chris');
Query OK, 1 row affected (0.54 sec)
mysql> INSERT INTO DemoTable VALUES(102, 'David');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable VALUES(103, 'Mike');
Query OK, 1 row affected (0.12 sec)

2. Java Code: OneResultDemo.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;

public class OneResultDemo {
    public static void main(String[] args) {
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            // 1. เชื่อมต่อ
            con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/web?useSSL=false", 
                "root", "123456"
            );
            
            // 2. SQL ดึง 1 แถวแรก
            String query = "SELECT * FROM DemoTable LIMIT 1";
            st = con.createStatement();
            rs = st.executeQuery(query);
            
            // 3. อ่านผลลัพธ์ (มีได้สูงสุด 1 แถว)
            while (rs.next()) {
                System.out.println("Id=" + rs.getInt("Id"));
                System.out.println("Name=" + rs.getString("Name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 4. ปิดทรัพยากร
            try { if (rs != null) rs.close(); } catch (Exception e) {}
            try { if (st != null) st.close(); } catch (Exception e) {}
            try { if (con != null) con.close(); } catch (Exception e) {}
        }
    }
}

3. ผลลัพธ์การรัน

Id=101
Name=Chris

จุดสำคัญ

  • LIMIT 1: จำกัดผลลัพธ์ 1 แถว (ประหยัด Network/CPU)
  • Statement vs PreparedStatement: Query คงที่ (Static) ใช้ Statement ได้ ไม่มีพารามิเตอร์
  • rs.next(): คืนค่า true ถ้ามีแถวถัดไป ใช้ while หรือ if ก็ได้ (แค่ 1 แถว)
  • rs.getInt("Id"), rs.getString("Name"): ดึงค่าตามชื่อคอลัมน์

ขยาย: ดึงแถวสุดท้าย (Last Row)

String query = "SELECT * FROM DemoTable ORDER BY Id DESC LIMIT 1";

ขยาย: ใช้ PreparedStatement (แนะนำ)

String query = "SELECT * FROM DemoTable WHERE Id = ? LIMIT 1";
PreparedStatement ps = con.prepareStatement(query);
ps.setInt(1, 102);
ResultSet rs = ps.executeQuery();

สรุป

ใช้ LIMIT 1 ใน SQL เพื่อดึง 1 แถว แล้วใน Java ใช้ ResultSet.next() อ่านครั้งเดียว ควรใช้ PreparedStatement หากมีเงื่อนไข WHERE และปิด Resource ใน finally เสมอ