2012-11-22 22 views
2

我有一个Date类型的变量。我通过使用返回类型Date的函数得到这个日期。所以,我定义了两个变量:如何在Java中使用Java插入日期

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类型。我该如何解决这个问题?

回答

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())); 
+0

这里的问题是,日期s插入正确,但在数据库中插入时间为:00:00 。 – user1810868

+0

您必须使用'setTimestamp()'作为java.sql.Date放弃时间部分 –

+0

存储在数据库中的值格式为'10-May-16 12:00:00 AM',我想要它将以“10-May-16”的格式存储。 – viveksinghggits

3

使用这样的:

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

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

因此,首先从您的java.util.Date对象中获取以毫秒为单位的时间,然后在java.sql.Date的构造函数中使用该时间。

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