Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chèn DATE vào MySQL từ Java với PreparedStatement

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.Date có cả ngày và giờ (milliseconds từ epoch)
  • java.sql.Date chỉ giữ ngày (normalized về 00:00:00)
  • ps.setDate(3, mySQLDate) gửi kiểu DATE chuẩn SQL
  • PreparedStatement防止 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.