在Java中处理MySQLdate和时间戳

在java应用程序中,在使用date时间和时间戳混合的MySQL数据库中提取和inputdate信息方面有什么好的折中?

在Java方面,date通常由(糟糕的devise,但抛开) java.util.Date 。 它基本上支持了时代的味道,也被称为时间戳。 它包含有关date和时间部分的信息。 在Java中,精度以毫秒为单位。

在SQL方面,有几种标准的date和时间types, DATETIMETIMESTAMP (在某些DB也称为DATETIME ),在JDBC中表示为java.sql.Datejava.sql.Timejava.sql.Timestampjava.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时间…?

http://www.velocityreviews.com/forums/t599436-the-best-practice-to-deal-with-datetime-in-mysql-using-jdbc.html

编辑:

正如其他人所指出的,使用string的build议可能会导致问题。