PreparedStatement将不含时间信息的java.util.Date和java.sql.Date设置为Mysql dateTime列

PreparedStatement将不含时间信息的java.util.Date和java.sql.Date设置为Mysql dateTime列,java,mysql,Java,Mysql,为什么dateTime mysql列上的java.sql.PreparedStatement#setDate总是以类似2012-10-16 00:00:00的日期格式显示,而没有时间信息?我将日期存储在如下循环中: protected Date getIncrementedDateTime() { additionalTime += 1000; return new Date(System.currentTimeMillis() + additionalTime); } pr

为什么dateTime mysql列上的
java.sql.PreparedStatement#setDate
总是以类似
2012-10-16 00:00:00
的日期格式显示,而没有时间信息?我将日期存储在如下循环中:

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的值。

根据以下文档:

围绕毫秒值的精简包装器,允许JDBC将其标识为SQL日期值。[……]

为了符合SQL日期的定义,必须通过将实例关联的特定时区中的小时、分钟、秒和毫秒设置为零来“规范化”java.SQL.DATE实例包装的毫秒值


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

java.sql.Date只是一个日期,没有时间。不要将它与包含时间信息的java.util.Date混淆。您可能需要查看java.sql.Timestamp。

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

TimeStamp与“dateTime”列类型不匹配,对吗?列的日期时间值“16:16:51”不正确。。。所以我需要使用“timeStamp”列类型和timeStamp数据类型?@Sloin:我怀疑
timeStamp
实际上可以很好地处理datetime列。这在JDBC中基本上是一个省略,但是
Timestamp
可能是您能得到的最接近的;与“dateTime”列配合使用效果良好type@Sloin时间戳应该可以正常工作。尝试这样做:preparedStatement.setDate(j,new java.sql.Timestamp(getIncrementedDateTime().getTime());