我有一个Date类型的变量。我通过使用返回类型Date
的函数来获取此日期。所以,我将两个变量定义为:
Date expDate=null, startDate=null;
然后,我调用了函数:
expDate=c.getNotAfter();
startDate= c.getNotBefore();
然后,使用:
插入数据库prepStmt.setDate(1,(java.sql.Date) startDate);
prepStmt.setDate(2, (java.sql.Date) expDate);
运行程序后,我收到此错误:
java.util.Date cannot be cast to java.sql.Date
数据库中的列定义为DATETIME类型。我该如何解决这个问题?
答案 0 :(得分:3)
像这样使用:
prepStmt.setDate(1,new java.sql.Date(startDate.getTime()));
这是因为setDate()
的{{1}}方法需要PreparedStatement
类型的对象作为第二个参数而不是java.sql.Date
。
首先从java.util.Date
对象获取时间(以毫秒为单位),然后在java.util.Date
的构造函数中使用它。
答案 1 :(得分:3)
这样做:
prepStmt.setDate(1,new java.sql.Date(startDate.getTime()));
java.sql.Date
是一个围绕毫秒值的瘦包装器,允许JDBC将其标识为SQL DATE
值。毫秒值表示自January 1, 1970 00:00:00.000 GMT
以来经过的毫秒数。
java.util.Date classes getTime()
以毫秒为单位返回时间。您可以使用它来创建java.sql.Date
类的新对象。
如果您想要时间和日期,请使用时间戳:
prepStmt.setTimestamp(1,new java.sql.Timestamp(startDate.getTime()));
答案 2 :(得分:1)
prepStmt.setDate(1, (java.sql.Date) startDate);
prepStmt.setDate(2, (java.sql.Date) expDate);
prepStmt.setDate(1, new java.sql.Date(startDate.getTime()));