java.util.Date 不能转换为 java.sql.Date [重复]
Posted
技术标签:
【中文标题】java.util.Date 不能转换为 java.sql.Date [重复]【英文标题】:java.util.Date cannot be cast to java.sql.Date [duplicate] 【发布时间】:2015-04-03 14:33:37 【问题描述】:我正在尝试将日期插入数据库,但由于 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.util.Date
不是java.sql.Date
的孩子,反之亦然。我相信你可以使用new java.sql.Date(dtToday.getTime());
sqlDate = new Date(javaDate.getTime());
我认为 dtToday 是您要插入的日期。您需要将其转换为 sql 日期
【参考方案1】:
添加以下行 - 因为它需要是 sql Date 而不是 util date
java.sql.Date sqlDate = new java.sql.Date(dtToday.getTime());
//now insert this sqlDate
【讨论】:
【参考方案2】:您应该使用java.sql.Timestamp
或java.sql.Date
而不是java.util.Date
java.sql.Date
的问题是它不会存储时间。所以使用时间戳是我一直采用的方法。因为它是java.util.date
的子类,所以它兼容DB 中的日期和时间戳列。
【讨论】:
【参考方案3】: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;
由于类名相同,因此应给出两个类的完全限定名(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;
【讨论】:
【参考方案4】:DateFormat.parse()
返回一个java.util.Date
,而您正试图将其非法转换为java.sql.Date
。
假设你继续导入java.sql.Date
,你可以像这样成功地分配变量:
dtToday = new Date(dtFmt.parse(next_dt).getTime());
【讨论】:
仍然无法插入数据库..【参考方案5】:您已导入java.sql.Data
。但是dtFmt.parse(next_dt);
返回一个java.util.Date
类型的对象,所以你必须改变
import java.sql.Date;
到
import java.util.Date;
【讨论】:
我也试过了,但后来我无法将 dtToday 插入表中。 如果您需要sql语句的日期,您必须将java.Util.Date
转换为java.sql.Date
,请参阅here如何做到这一点。以上是关于java.util.Date 不能转换为 java.sql.Date [重复]的主要内容,如果未能解决你的问题,请参考以下文章
jdbc-java.sql.date和java.util.date之间转换
如何从 java.sql.Timestamp 转换为 java.util.Date?