mysql存儲日期數據常用的格式為 date 和 datetime,(其他還有timestamp等,但是沒用過)。
date與datetime的區別為:
- date只保留日期,不保留時間值,如存的時候是 2019-5-7 12:12:12,取的時候就是 2019-5-7 00:00:00
- datetime會保留日期時間值,但是末尾會多個0,如:2019-05-08 14:14:14.0
在mysql中的存儲格式:

JDBC操作日期類型數據
date 對應 java.sql.Date,datetime 對應 java.sql.Timestamp
1、存儲
存儲有三種方式
// preparedStatement.setDate(1, new Date(DateUtil.strToLong("2019-5-4 12:12:12"))); // preparedStatement.setTimestamp(1, new Timestamp(DateUtil.strToLong("2019-5-4 12:12:12"))); preparedStatement.setString(1, "2019/5/7 12:12:12");
這三種方式date和datetime類型都適用,對於date類型三種都只會存入日期值;對於datetime類型,第一種方式只會設置日期值。
第三種方式直接設置字符串,雖然數據庫中默認適用 ‘-’ 分隔日期 ‘:’ 分隔時間,但是實際寫什么分隔都行,2019$5*7 12@12:12 這么寫都行。
2、取出
取出方式有:使用對應類型的api取出時間對象,為java.sql下的類,也可以使用String類型取出。
System.out.println("date類型:");
System.out.println(resultSet.getDate("date_1"));
System.out.println(resultSet.getTime("date_1"));
System.out.println(resultSet.getTimestamp("date_1"));
System.out.println(resultSet.getString("date_1"));
System.out.println("datetime類型:");
System.out.println(resultSet.getDate("datetime_1"));
System.out.println(resultSet.getTime("datetime_1"));
System.out.println(resultSet.getTimestamp("datetime_1"));
System.out.println(resultSet.getString("datetime_1"));

public class TestDate { private static final String sql1 = "insert into t_date values(null, ?, ?, ?) "; private static final String sql2 = "select * from t_date where id=?"; public static void main(String[] args) { insert(); // select(); } public static void select(){ try { Connection connection = DBUtil.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql2); preparedStatement.setInt(1, 5); ResultSet resultSet = preparedStatement.executeQuery(); while(resultSet.next()){ System.out.println(resultSet.getInt(1)); System.out.println("==========-=-=--=-=-=-=-----"); System.out.println("date類型:"); System.out.println(resultSet.getDate("date_1")); System.out.println(resultSet.getTime("date_1")); System.out.println(resultSet.getTimestamp("date_1")); System.out.println(resultSet.getString("date_1")); System.out.println("datetime類型:"); System.out.println(resultSet.getDate("datetime_1")); System.out.println(resultSet.getTime("datetime_1")); System.out.println(resultSet.getTimestamp("datetime_1")); System.out.println(resultSet.getString("datetime_1")); System.out.println("==========-=-=--=-=-=-=-----"); System.out.println(resultSet.getBigDecimal("big_decimal")); System.out.println("==========-=-=--=-=-=-=-----"); } connection.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void insert(){ try { Connection connection = DBUtil.getConnection(); System.out.println(connection); PreparedStatement preparedStatement = connection.prepareStatement(sql1); //數據庫字段為date類型, // preparedStatement.setDate(1, new Date(DateUtil.strToLong("2019-5-4 12:12:12"))); // preparedStatement.setTimestamp(1, new Timestamp(DateUtil.strToLong("2019-5-4 12:12:12"))); preparedStatement.setString(1, "2019-5-4 12:12:12"); //數據庫字段為datetime類型 // preparedStatement.setDate(2, new Date(new java.util.Date().getTime())); //Date對象設置會不保存時間值 // preparedStatement.setTimestamp(2, new Timestamp(new Date().getTime())); preparedStatement.setString(2, "2019-5-8 12:12:12"); //數據庫字段類型為bigdecimal preparedStatement.setDouble(3, 23.4); int i = preparedStatement.executeUpdate(); System.out.println(i); connection.close(); } catch (SQLException e) { e.printStackTrace(); } } }
