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(); } } }