PreparedStatement将没有Time信息的java.util.Date和java.sql.Date设置为Mysql dateTime列

时间:2012-10-16 15:38:03

标签: java mysql

为什么dateTime mysql列上的java.sql.PreparedStatement#setDate总是导致日期格式如2012-10-16 00:00:00没有时间信息?我将Date存储在这样的循环中:

protected Date getIncrementedDateTime() {
    additionalTime += 1000;
    return new Date(System.currentTimeMillis() + additionalTime);
}


preparedStatement.setDate(j, new java.sql.Date(getIncrementedDateTime().getTime());

我调试了这些值,但是mysql数据库总是有2012-10-16 00:00:00的值。

3 个答案:

答案 0 :(得分:3)

根据java.sql.Date的文档:

  

一个围绕毫秒值的瘦包装器,允许JDBC将其标识为SQL DATE值。 [...]

     

为了符合SQL DATE的定义,java.sql.Date实例包含的毫秒值必须通过在特定时区中将小时,分钟,秒和毫秒设置为零来“标准化”。实例是关联的。

基本上,对于datetime列,您可能应该使用其他类型,例如Timestamp。 (这在其他方面并不理想,但它可能更适合......)

答案 1 :(得分:0)

java.sql.Date只是一个日期 - 没时间。不要将它与java.util.Date混淆,后者包括时间信息。您可能想查看java.sql.Timestamp。

答案 2 :(得分:0)

它基于表格列的数据类型。根据数据库服务器尝试使用TimeStampTime