2

我有一个日期类型的变量。我通过使用返回 type 的函数得到这个日期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 类型。我该如何解决这个问题?

4

3 回答 3

3

像这样使用它:

prepStmt.setDate(1,new java.sql.Date(startDate.getTime())); 

这是因为setDate()方法PreparedStatement需要一个java.sql.Date类型的对象作为第二个参数,而不是java.util.Date

因此,首先从您的java.util.Date对象中获取以毫秒为单位的时间,然后在java.sql.Date.

于 2012-11-22T04:26:01.667 回答
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 类getTime()以毫秒为单位返回时间。您可以使用它来创建一个新的java.sql.Date类对象。

如果您想要时间和日期,请使用时间戳:

prepStmt.setTimestamp(1,new java.sql.Timestamp(startDate.getTime()));
于 2012-11-22T04:29:37.227 回答
1
prepStmt.setDate(1, (java.sql.Date) startDate);   
prepStmt.setDate(2, (java.sql.Date) expDate);  
prepStmt.setDate(1, new java.sql.Date(startDate.getTime()));
于 2013-03-16T12:48:58.923 回答