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

Insert DATE ลง MySQL ด้วย Java PreparedStatement

ภาพรวม

ใช้ PreparedStatement และ java.sql.Date เพื่อ Insert วันที่ลง MySQL อย่างปลอดภัย (ป้องกัน SQL Injection) และถูกต้อง

โครงสร้างตาราง MySQL

CREATE TABLE DemoTable (
    PassengerId INT,
    PassengerName VARCHAR(40),
    ArrivalDate DATE
);

โค้ด Java สมบูรณ์

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class InsertDateFromJava {
    public static void main(String[] args) {
        Connection con = null;
        PreparedStatement ps = null;
        
        try {
            // 1. สร้าง java.util.Date (วันเวลาปัจจุบัน)
            java.util.Date javaDate = new java.util.Date();
            
            // 2. แปลงเป็น java.sql.Date (เฉพาะ Date ไม่มี Time)
            java.sql.Date mySQLDate = new java.sql.Date(javaDate.getTime());
            
            // 3. เชื่อมต่อ Database
            con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/web?useSSL=false", 
                "root", "123456"
            );
            
            // 4. PreparedStatement พร้อม Placeholder (?)
            String query = "INSERT INTO DemoTable (PassengerId, PassengerName, ArrivalDate) VALUES (?, ?, ?)";
            ps = con.prepareStatement(query);
            
            // 5. Bind Parameters
            ps.setInt(1, 101);
            ps.setString(2, "Adam");
            ps.setDate(3, mySQLDate);  // สำคัญ: ใช้ setDate สำหรับ DATE
            
            // 6. Execute
            ps.executeUpdate();
            System.out.println("Record is inserted with current Date......");
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 7. ปิด Resource (สำคัญ!)
            try { if (ps != null) ps.close(); } catch (Exception e) {}
            try { if (con != null) con.close(); } catch (Exception e) {}
        }
    }
}

จุดสำคัญ

ขั้นตอนคำอธิบาย
java.util.DateDate + Time (Java Standard)
java.sql.DateDate เท่านั้น (extends util.Date) - สำหรับ SQL DATE
getTime()คืนค่า Milliseconds since Epoch (ร่วมกันได้)
ps.setDate()Bind java.sql.Date เข้า Parameter
?Placeholder ป้องกัน SQL Injection

ผลลัพธ์ใน MySQL

SELECT * FROM DemoTable;
+-------------+---------------+-------------+
| PassengerId | PassengerName | ArrivalDate |
+-------------+---------------+-------------+
| 101         | Adam          | 2019-09-07  |
+-------------+---------------+-------------+

กรณี DateTime / Timestamp

// สำหรับ DATETIME / TIMESTAMP ใช้ java.sql.Timestamp
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(javaDate.getTime());
ps.setTimestamp(3, sqlTimestamp);

Best Practices

  • ใช้ try-with-resources (Java 7+) เพื่อ Auto-close
  • ใช้ Connection Pool (HikariCP, DBCP) ใน Production
  • กำหนด Timezone ให้ตรงกัน: serverTimezone=UTC ใน JDBC URL
  • Batch Insert: ps.addBatch() + ps.executeBatch() สำหรับข้อมูลมาก

สรุป

แปลง java.util.Date → java.sql.Date → ps.setDate() เพื่อ Insert DATE ลง MySQL อย่างถูกต้องและปลอดภัย