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

Chèn java.sql.Date NULL (rỗng) vào MySQL Database từ Java


Vấn đề

Cần insert giá trị NULL cho cột DATE trong MySQL từ Java (JDBC). Dùng PreparedStatement.setNull() thay vì setDate(null).

Code Java hoàn chỉnh

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

public class InsertNullDateDemo {
    public static void main(String[] args) {
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/web?useSSL=false", 
                "root", "123456");
            
            String query = "INSERT INTO DemoTable(AdmissionDate) VALUES (?)";
            ps = con.prepareStatement(query);
            
            // Quan trọng: setNull với kiểu SQL DATE
            ps.setNull(1, java.sql.Types.DATE);
            
            ps.executeUpdate();
            System.out.println("check the table......");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Đóng resource
            try { if (ps != null) ps.close(); } catch (Exception e) {}
            try { if (con != null) con.close(); } catch (Exception e) {}
        }
    }
}

Giải thích

  • ps.setNull(parameterIndex, sqlType): Tham số 1 là vị trí placeholder (?), tham số 2 là java.sql.Types.DATE (hoặc TIMESTAMP, TIME...).
  • Không dùng ps.setDate(1, null) → có thể ném NullPointerException hoặc driver không hiểu kiểu SQL.
  • java.sql.Types định nghĩa hằng số kiểu SQL chuẩn JDBC.

Tạo bảng MySQL

CREATE TABLE DemoTable (AdmissionDate DATE);

Kết quả kiểm tra

Sau khi chạy Java, cột AdmissionDate sẽ là NULL.

mysql> SELECT * FROM DemoTable;
+---------------+
| AdmissionDate |
+---------------+
| NULL          |
+---------------+

Best Practice JDBC

  • Luôn dùng try-with-resources (Java 7+) để tự đóng Connection/Statement.
  • Dùng Connection Pool (HikariCP) thay vì DriverManager.getConnection trực tiếp.
  • Externalize config (URL, user, pass) ra file properties/yaml.