一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

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

2020-12-29 14:32西夏一品堂 Java教程

這篇文章主要給大家介紹了關于JDBC中如何使用Java8的日期LocalDate和LocalDateTime的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

相信大家應該都知道,在實體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來操作mysqlpostgresql,話不多說了,來一看看詳細的介紹吧。

一: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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产卡一卡二卡三卡四 | 五月性 | 99视频免费在线观看 | 青草青草视频 | 国产亚洲高清国产拍精品 | 午夜A级理论片左线播放 | 肥胖女性大bbbbbb视频女厕 | 四虎在线最新地址公告 | 亚欧美综合 | acg火影忍者熟密姬纲手h | 亚洲精品一区二区三区在线看 | 情缘免费观看完整版 | 国产亚洲精品精品国产亚洲综合 | 男女全黄h全肉细节文 | 洗濯屋し在线观看 | 久久久精品国产免费A片胖妇女 | 操熟美女又肥又嫩的骚屁股 | 出轨同学会2在线观看 | 全肉一女n男np高h乳 | 男插女的下面免费视频夜色 | 99爱免费 | 成人另类视频 | 国产探花视频在线观看 | xxxx在线视频| 日本大学jalapsiki | japanesqirl日本护士 | 538精品视频在线观看 | 91麻豆制片厂 | 91亚洲一区二区在线观看不卡 | 美妇在男人胯下哀求 | 国产中文视频 | 嫩草影院永久一二三入口 | 欧美灰丝袜丝交nylons | 四虎综合九九色九九综合色 | 日本暖暖在线 | 无人区在线观看免费观看 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 | 蜜桃成熟时1997在线看免费看 | 国产成人8x视频一区二区 | 亚洲成人在线播放 | 欧美在线视频免费播放 |