在实体Entity里面,可以使用java.sql.Date、java.sql.Timestamp、java.util.Date来映射到数据库的date、timestamp、datetime等字段

但是,java.sql.Date、java.sql.Timestamp、java.util.Date这些类都不好用,很多方法都过时了。

Java8里面新出来了一些API,LocalDate、LocalTime、LocalDateTime 非常好用

如果想要在JDBC中,使用Java8的日期LocalDate、LocalDateTime,则必须要求数据库驱动的版本不能低于4.2

下面将分别演示如何在JDBC中使用Java8的日期LocalDate、LocalDateTime来操作mysql,postgresql

一:MySQL

首先创建表:

create table tab_java8date (id int not null primary key auto_increment,t_date date, t_time time, t_datetime datetime);

然后,加入mysql的驱动

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>5.1.37</version>
  5. </dependency>

上面说了,数据库驱动的版本不能低于4.2,如何判断呢?

直接打开数据库驱动jar,里面有个META-INF/MANIFEST.MF文件

注意这里,必须要至少是4.2

JDBC代码如下:

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.time.LocalDate;
  5. import java.time.LocalDateTime;
  6. import java.time.LocalTime;
  7. public class App {
  8. public static void main(String[] args) throws Exception {
  9. Class.forName("com.mysql.jdbc.Driver");
  10. Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.1.100:3306/db_java8","root","root123");
  11. PreparedStatement st = conn.prepareStatement("insert into tab_java8date (t_date,t_time,t_datetime)values(?,?,?)");
  12. st.setObject(1, LocalDate.now());
  13. st.setObject(2, LocalTime.now());
  14. st.setObject(3, LocalDateTime.now());
  15. st.execute();
  16. st.close();
  17. conn.close();
  18. }
  19. }

运行,查询数据库

mysql> select * from tab_java8date;
+----+------------+----------+---------------------+
| id | t_date     | t_time   | t_datetime          |
+----+------------+----------+---------------------+
|  1 | 2016-11-13 | 11:34:31 | 2016-11-13 11:34:31 |
+----+------------+----------+---------------------+
1 row in set (0.00 sec)

看到已经成功插入到数据库中去了

如果你使用的mysql-connector-java版本低于5.1.37,则数据库的驱动版本低于4.2,运行会报如下错误:

  1. Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x07\x03\x00\x00\x07\xE0\x0B\x0Dx' for column 't_date' at row 1
  2. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3845)
  3. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
  4. at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447)
  5. at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594)
  6. at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
  7. at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
  8. at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1193)
  9. at com.pp.App.main(App.java:18)

对于mysql驱动器,可以通过查看release note查看支持的版本,https://dev.mysql.com/doc/relnotes/connector-j/5.1/en/news-5-1-45.html。

在JDBC中使用Java8的日期LocalDate、LocalDateTime的更多相关文章

  1. (后端)mybatis中使用Java8的日期LocalDate、LocalDateTime

    原文地址:https://blog.csdn.net/weixin_38553453/article/details/75050632 MyBatis的型处理器是属性“createdtime参数映射为 ...

  2. java8中计算两个日期时间LocalDateTime的时间差,格式化成xx年yy月zz日aa时bb分cc秒

    原则上应该适用Period来计算,因为他是专门为这种需求设计的.当时他只能计算到两个时间差的,年月日 传入参数Period.between(LocalDate,LocalDate) 这里是计算两个Lo ...

  3. Java8 中的时间和日期 API

    1. 日期和时间概述 LocalDate,LocalTime,LocalDateTime类的实例是不可变的对象,分别表示使用 ISO-8601 日历系统 的日期,时间,日期和时间;它们提供了简单的日期 ...

  4. Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析

    目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总 ...

  5. Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

    通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...

  6. [转]JDBC中日期时间的处理技巧

    Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...

  7. 【Java 与数据库】JDBC中日期时间的处理技巧

    JDBC中日期时间的处理技巧 详谈Java.util.Date和Java.sql.Date 基础知识 Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒 ...

  8. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  9. 如何在JDK1.8中愉快地处理日期和时间

    如何在JDK1.8中愉快地处理日期和时间 JDK1.8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了. ...

随机推荐

  1. Makefile 的使用

    第一篇: OBJS = ./persion.o all : persion @echo "version 03" persion : $(OBJS) g++ -o $@ $^ ./ ...

  2. wget实例

    问题:下载http://web.utah.edu/thorne/computing/网页中所有的文件 命令:wget -c -r -np -k -L -p http://web.utah.edu/th ...

  3. 【转】GPS误差来源

    一.与GPS卫星有关的误差 1.卫星时钟误差 即使卫星是非常的精密复杂,它可以计算出一些极微小的讯息信息,如原子钟(Cesium) 即是如此一个精准的装置,但是精准并不代表完美,因此仍会有一些微小的误 ...

  4. Firefox使用Poster插件发送post请求

    目的:验证http请求功能正确与否,需要发送post,get请求,则可以使用Poster插件方便简单. 自我总结,有什么改正的地方请指出,感激不尽! 1.安装Poster插件. 点击firefox右上 ...

  5. 用swing做一个简单的正则验证工具

    直接上代码吧,因为我对swing也不熟悉,照着API一点点拼出来的. import java.awt.event.ActionEvent; import java.awt.event.ActionLi ...

  6. python布尔类型

    布尔类型 python当中下面的值在作为布尔表达式时,会被解释器看作False: 1.None: 2.False: 3.任何为0的数字类型,如:0,0.0,0j: 4.任何空序列,如:'',(),[] ...

  7. sap中Excel的模版上传和下载

    一:事物码smw0 二:上传步骤 注:"包"为项目的包的名称. 三:下载代码 l_filename = 'XX.xls'. l_muban = 'z123'. *&---下 ...

  8. Jsonp 原理简述

    浏览器因为安全问题而有一个同源策略,不允许跨域请求数据.但是 js 脚本资源和图片资源还是被允许跨域请求的.在 web 开发中,遇到要跨域请求 json 数据时,可以用 jsonp 的方式来绕过浏览器 ...

  9. MySQL系统临时表、用户临时表

    MySQL临时表分为系统使用的临时表和用户使用的临时表. 系统使用的临时表是指MySQL在执行某些SQL语句时需要依赖临时表来完成整个过程.系统使用的临时表的情况可以分为以下几种: *  group ...

  10. Android图像处理 - 高斯模糊的原理及实现

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 由 天天P图攻城狮 发布在云+社区 作者简介:damonxia(夏正冬),天天P图Android工程师 前言 高斯模糊是图像处理中几乎每个程序员 ...