JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

  • 更新时间:2020-07-08 09:54:02
  • 编辑:慕浩言
为网友们分享了相关的编程文章,网友詹怡可根据主题投稿了本篇教程内容,涉及到jdbc、localdate、java8、localdatetime、java、localdatetime、JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql相关内容,已被474网友关注,相关难点技巧可以阅读下方的电子资料。

参考资料

正文内容

JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

前言

相信大家应该都知道,在实体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 tb_java8date (id int not null primary key auto_increment,t_date date, t_time time, t_datetime datetime);

然后,加入mysql的驱动

<dependency> 
 <groupId>mysql</groupId> 
 <artifactId>mysql-connector-java</artifactId> 
 <version>5.1.37</version> 
</dependency> 

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

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

JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

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

JDBC代码如下:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.time.LocalDate; 
import java.time.LocalDateTime; 
import java.time.LocalTime; 
 
public class App { 
 public static void main(String[] args) throws Exception { 
  Class.forName("com.mysql.jdbc.Driver"); 
  Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.1.100:3306/db_java8","root","root123"); 
  PreparedStatement st = conn.prepareStatement("insert into tb_java8date (t_date,t_time,t_datetime)values(?,?,?)"); 
  st.setObject(1, LocalDate.now()); 
  st.setObject(2, LocalTime.now()); 
  st.setObject(3, LocalDateTime.now()); 
  st.execute(); 
  st.close(); 
  conn.close(); 
 } 
} 

运行,查询数据库

mysql> select * from tb_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,运行会报如下错误:

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 
 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3845) 
 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783) 
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447) 
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594) 
 at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545) 
 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901) 
 at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1193) 
 at com.pp.App.main(App.java:18) 

二:PostgreSQL

首先创建表:

create table tb_java8date (id SERIAL not null primary key,t_date date, t_time time, t_datetime timestamp);

然后,加入PostgreSQL的数据库驱动

<dependency> 
 <groupId>org.postgresql</groupId> 
 <artifactId>postgresql</artifactId> 
 <version>9.4.1212</version> 
</dependency> 

注意这里添加的数据库驱动版本最低要是4.2,检验方法和上面类似

JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

JDBC代码如下:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.time.LocalDate; 
import java.time.LocalDateTime; 
import java.time.LocalTime; 
 
public class App { 
 public static void main( String[] args ) throws Exception { 
  Class.forName("org.postgresql.Driver"); 
  Connection conn = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/pg_java8","admin","123456"); 
  PreparedStatement st = conn.prepareStatement("insert into tb_java8date (t_date,t_time,t_datetime)values(?,?,?)"); 
  System.out.println(st.getClass()); 
  st.setObject(1, LocalDate.now()); 
  st.setObject(2, LocalTime.now()); 
  st.setObject(3, LocalDateTime.now()); 
  st.execute(); 
  st.close(); 
  conn.close(); 
 } 
} 

运行,然后查询数据库表

JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

发现,已经成功执行

如果你加入的依赖,数据库的驱动版本低于4.2,运行会报如下错误:

Exception in thread "main" org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of java.time.LocalDate. Use setObject() with an explicit Types value to specify the type to use. 
 at org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:1051) 
 at com.pp.App.main(App2.java:16) 

以上只是演示了mysql,postgresql两个数据库,其他的数据库,请自行测试。我这里就不演示了,方法都类似。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对码农之家的支持。

相关教程

  • springboot+webmagic实现java爬虫jdbc及mysql实例代码

    今天小编就为大家分享一篇springboot+webmagic实现java爬虫jdbc及mysql的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2020-02-10

  • JDBC简介知识点整理

    什么是JDBC?这篇文章就为大家详细介绍了Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2019-12-10

  • JDBC在MySQL数据库中如何批量插入数据

    这篇文章主要介绍了使用JDBC在MySQL数据库中如何快速批量插入数据,可以有效的解决一次插入大数据的方法,

    发布时间:2019-06-20

  • 详解JDBC实现学生管理系统

    这篇文章主要为大家详细介绍了JDBC实现学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2020-03-17

  • SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表示例效果

    这篇文章主要介绍了SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下

    发布时间:2020-01-26

  • 如何解决JDBC连接Mysql 8.0.11出现的各种问题

    这篇文章主要介绍了使用JDBC连接Mysql 8.0.11出现了各种错误的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学

    发布时间:2020-01-16

  • java用jdbc连接数据库实例方法

    这篇文章主要为大家详细介绍了java使用jdbc连接数据库的简单实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2019-06-05

  • Java JDK8 学习笔记

    Java JDK8 学习笔记

    本书针对Java SE 8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新,详细介绍了JVM、JRE、Java SE API、JDK与IDE之间的对照关系,从Java SE API的源代码分析,了解各种语法在Java SE API中的具体应用

    大小:92.3 MBJava电子书

  • Java遗传算法编程

    Java遗传算法编程

    本书简单、直接地介绍了遗传算法,并且针对所讨论的示例问题,给出了Java代码的算法实现。全书共分为6章。本书适合机器学习爱好者阅读,尤其适合对遗传算法的理论和实现感兴趣的读者阅

    大小:28.8 MBJava算法电子书

  • 代码不朽:编写可维护软件的10大要则(Java版)

    代码不朽:编写可维护软件的10大要则(Java版)

    本书提供代码示例,能够让读者一步步了解到如何对代码进行重构,从大量实践项目中提取出了编写可维护软件的10个最佳原则,帮助读者编写出高质量、简洁的代码,开发出松耦合、高可维护

    大小:25.1 MBJava电子书

  • JavaScript之美

    JavaScript之美

    阅读文章这书好像是坐着来与一些JavaScript大师共进午餐,听她们探讨她们现场不断涌现出去的新念头。JavaScript能够说成全世界*异议和别人误会*多的程序语言。许多人企图用别的语言替代它的

    大小:94 MBJavaScript电子书

  • JavaScript忍者秘籍

    JavaScript忍者秘籍

    这是由jQuery库创始人编写的一本深入剖析JavaScript语言的书,从不同层次讲述了逐步成为JavaScript高手所需的知识,适合具备一定JavaScript基础知识的读者阅读

    大小:38.6 MBJavaScript电子书

用户留言