java8 mysql datetime_在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来操作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的驱动

mysql

mysql-connector-java

5.1.37

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

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

754376a046d6cfd395f4e7252e9d8fbd.png

注意这里,必须要至少是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 tab_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 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,运行会报如下错误:

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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值