Insert DATE vào MySQL từ Java sử dụng PreparedStatement
Sử dụng java.sql.Date (wrapper của java.util.Date) và PreparedStatement.setDate() để chèn ngày an toàn, tránh SQL injection và lỗi định dạng.
1. Tạo bảng MySQL
mysql> CREATE TABLE DemoTable (
PassengerId INT,
PassengerName VARCHAR(40),
ArrivalDate DATE
);
2. Code Java đầy đủ
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. Tạo java.util.Date (ngày hiện tại)
java.util.Date javaDate = new java.util.Date();
// 2. Chuyển sang java.sql.Date (chỉ giữ ngày, bỏ giờ)
java.sql.Date mySQLDate = new java.sql.Date(javaDate.getTime());
// 3. Kết nối database
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/web?useSSL=false", "root", "123456");
// 4. PreparedStatement với 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); // Quan trọng: setDate cho DATE
// 6. Thực thi
ps.executeUpdate();
System.out.println("Record is inserted with current Date......");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7. Đóng tài nguyên (try-with-resources tốt hơn Java 7+)
try { if (ps != null) ps.close(); } catch (Exception ignored) {}
try { if (con != null) con.close(); } catch (Exception ignored) {}
}
}
}
3. Kết quả chạy Java
Record is inserted with current Date......
4. Kiểm tra trong MySQL
mysql> SELECT * FROM DemoTable;
+-------------+---------------+-------------+ | PassengerId | PassengerName | ArrivalDate | +-------------+---------------+-------------+ | 101 | Adam | 2019-09-07 | +-------------+---------------+-------------+
Điểm quan trọng:
java.util.Datecó cả ngày và giờ (milliseconds từ epoch)java.sql.Datechỉ giữ ngày (normalized về 00:00:00)ps.setDate(3, mySQLDate)gửi kiểu DATE chuẩn SQLPreparedStatement防止 SQL injection, tự động escape
Java 8+ (java.time):
LocalDate localDate = LocalDate.now(); java.sql.Date sqlDate = java.sql.Date.valueOf(localDate); ps.setDate(3, sqlDate);
Lưu ý: URL JDBC dùng : không phải khoảng trắng: jdbc:mysql://localhost:3306/db.