我有一个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类型。我如何解决这个问题?
发布于 2012-11-22 12:29:37
如下所示:
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-22 12:26:02
像这样使用它:
prepStmt.setDate(1,new java.sql.Date(startDate.getTime()));
这是因为PreparedStatement
的setDate()
方法需要一个java.sql.Date
类型的对象作为第二个参数,而不是java.util.Date
。
因此,首先从java.util.Date
对象中获取以毫秒为单位的时间,然后在java.sql.Date
的构造函数中使用该时间。
发布于 2013-03-16 20:48:59
prepStmt.setDate(1, (java.sql.Date) startDate);
prepStmt.setDate(2, (java.sql.Date) expDate);
prepStmt.setDate(1, new java.sql.Date(startDate.getTime()));
https://stackoverflow.com/questions/13505867
复制相似问题