PreparedStatement将不含时间信息的java.util.Date和java.sql.Date设置为Mysql dateTime列
为什么dateTime mysql列上的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
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());