คลาส java.sql.Date ใช้แทนค่าวันที่ใน JDBC (ไม่มีส่วนเวลา) มี 2 วิธีสร้างหลัก
วิธีที่ 1: ใช้ Constructor (รับค่า milliseconds)
public class Demo {
public static void main(String args[]) {
// จาก epoch milliseconds
long epoch = 622751400000L; // 26-09-1989
java.sql.Date date = new java.sql.Date(epoch);
System.out.println("Date value: " + date);
}
}
ผลลัพธ์
Date value: 1989-09-26
โดยปกติจะแปลงจาก String → Date → getTime() → sql.Date:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.sql.Date;
public class Demo {
public static void main(String args[]) throws ParseException {
String str = "26-09-1989";
SimpleDateFormat obj = new SimpleDateFormat("dd-MM-yyyy");
long epoch = obj.parse(str).getTime();
// สร้าง java.sql.Date
Date sqlDate = new Date(epoch);
System.out.println("Date value: " + sqlDate);
}
}
วิธีที่ 2: ใช้ valueOf() (Java 8+) - แนะนำ
มี 2 overload:
valueOf(LocalDate date)valueOf(String s)- รูปแบบ yyyy-[m]m-[d]d
จาก LocalDate
import java.sql.Date;
import java.time.LocalDate;
public class Demo {
public static void main(String args[]) {
LocalDate localDate = LocalDate.of(2014, 9, 11);
Date date = Date.valueOf(localDate);
System.out.println("Date Value: " + date);
}
}
ผลลัพธ์
Date Value: 2014-09-11
จาก String (ISO format)
import java.sql.Date;
public class Demo {
public static void main(String args[]) {
String str = "2017-12-03";
Date date = Date.valueOf(str);
System.out.println("Date Value: " + date);
}
}
ผลลัพธ์
Date Value: 2017-12-03
⚠️ ข้อควรระวัง
- java.sql.Date extends java.util.Date แต่ normalize time component เป็น 00:00:00
- เมธอดเวลา (getHours, getMinutes, etc.) ถูก deprecated และโยน Exception
- ใช้สำหรับ JDBC DATE type เท่านั้น (ไม่มี TIME)
- สำหรับ TIMESTAMP ใช้ java.sql.Timestamp
Best Practice สำหรับ JDBC
// แปลง LocalDate → sql.Date (แนะนำ) LocalDate localDate = LocalDate.now(); java.sql.Date sqlDate = java.sql.Date.valueOf(localDate); // PreparedStatement preparedStatement.setDate(1, sqlDate);