java.util.Date 无法转换为 java.sql.Date

java.util.Date cannot be cast to java.sql.Date

我正在尝试将日期插入数据库,但出现错误,因为 java.util.Date 无法转换为 java.sql.Date。 请帮忙。

String next_dt = req.getParameter("NextDate");
DateFormat dtFmt = null;
dtFmt = new SimpleDateFormat("yyyy-MM-dd");
dtToday = (Date) dtFmt.parse(next_dt);

您已导入 java.sql.Data。但是 dtFmt.parse(next_dt); returns 类型的对象 java.util.Date 所以你必须改变

import java.sql.Date;

import java.util.Date;

DateFormat.parse() returns a java.util.Date,而您试图将其非法转换为 java.sql.Date.

假设您继续导入 java.sql.Date,您可以像这样成功地分配变量:

dtToday = new Date(dtFmt.parse(next_dt).getTime());
public static java.sql.Date convertFromJAVADateToSQLDate(
        java.util.Date javaDate) {
    java.sql.Date sqlDate = null;
    if (javaDate != null) {
        sqlDate = new Date(javaDate.getTime());
    }
    return sqlDate;
}

由于 class 的名称相同,因此应给出两个 class 的完全限定名称 (FQN) 您也可以使用格式化方法将日期转换为正确的 SQL格式化日期。

public static String toMysqlDateStr(Date date) {
String dateForMySql = "";
if (date == null) {
    dateForMySql = null;
} else {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateForMySql = sdf.format(date);
}

return dateForMySql;

}

您应该使用 java.sql.Timestampjava.sql.Date 而不是 java.util.Date java.sql.Date 的问题是它不会存储时间。所以使用时间戳是我一直采用的方法。因为它是 java.util.date 的子 class,所以它与数据库中的日期和时间戳列兼容。

添加以下行 - 因为它需要是 sql 日期而不是实用日期

java.sql.Date sqlDate = new java.sql.Date(dtToday.getTime());
//now insert this sqlDate