gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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 。

首先创建表:

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

然后,加入mysql的驱动 。

?
1
2
3
4
5
<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代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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();
  }
}

运行,查询数据库 。

?
1
2
3
4
5
6
7
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,运行会报如下错误:

?
1
2
3
4
5
6
7
8
9
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 。

首先创建表:

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

然后,加入postgresql的数据库驱动 。

?
1
2
3
4
5
<dependency>
  <groupid>org.postgresql</groupid>
  <artifactid>postgresql</artifactid>
  <version> 9.4 . 1212 </version>
</dependency>

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

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

jdbc代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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,运行会报如下错误:

?
1
2
3
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两个数据库,其他的数据库,请自行测试。我这里就不演示了,方法都类似.

总结 。

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

原文链接:http://blog.csdn.net/mn960mn/article/details/53148044 。

最后此篇关于JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql的文章就讲到这里了,如果你想了解更多关于JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com