在Java中处理MySQLdate和时间戳
在java应用程序中,在使用date时间和时间戳混合的MySQL数据库中提取和inputdate信息方面有什么好的折中?
在Java方面,date通常由(糟糕的devise,但抛开) java.util.Date
。 它基本上支持了时代的味道,也被称为时间戳。 它包含有关date和时间部分的信息。 在Java中,精度以毫秒为单位。
在SQL方面,有几种标准的date和时间types, DATE
, TIME
和TIMESTAMP
(在某些DB也称为DATETIME
),在JDBC中表示为java.sql.Date
, java.sql.Time
和java.sql.Timestamp
, java.util.Date
所有子类 。 精度依赖于数据库,通常以毫秒为单位,如Java,但也可以在几秒钟内完成。
与java.util.Date
相反, java.sql.Date
只包含有关date部分(年,月,日)的信息。 Time
只包含有关时间部分(小时,分钟,秒)的信息, Timestamp
包含有关这两部分的信息,就像java.util.Date
所做的那样。
在数据库中存储时间戳的正常实践(因此,Java端的java.util.Date
和JDBC端的java.sql.Timestamp
)是使用PreparedStatement#setTimestamp()
。
java.util.Date date = getItSomehow(); Timestamp timestamp = new Timestamp(date.getTime()); preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?"); preparedStatement.setTimestamp(1, timestamp);
从数据库获取时间戳的一般做法是使用ResultSet#getTimestamp()
。
Timestamp timestamp = resultSet.getTimestamp("ts"); java.util.Date date = timestamp; // You can just upcast.
MySQL 文档具有将MySQLtypes映射到Javatypes的信息。 一般来说,对于MySQL datetime和timestamps,你应该使用java.sql.Timestamp
。 一些资源包括:
http://dev.mysql.com/doc/refman/5.1/en/datetime.html
http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion
如何将Javadate存储到MySQLdate时间…?
编辑:
正如其他人所指出的,使用string的build议可能会导致问题。