前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDBC日期和新的JDK8 日期API转换问题

JDBC日期和新的JDK8 日期API转换问题

作者头像
乐百川
发布2022-05-05 19:40:47
5990
发布2022-05-05 19:40:47
举报
文章被收录于专栏:乐百川的学习频道

网上的Java博客,凡是有几年的,而且有关于日期的地方,基本上用的都是java.util.Date这个类。如果有细心的同学看一下Eclipse或者IDEA的代码提示,就会发现java.util.Date这个类几乎所有方法都被标记为了过时的。实际上这个类也已经过时了。原因很简单,这个类在第一版Java中就出现了,但是这个类设计并不完善,导致用它来处理时间非常麻烦。

在新的JDK8中引入了一组全新的日期时间类,在java.time包下,具体用法我就不说了。这些新类包含了很多新方法,功能比旧类更强大、更完善。所以现在我们的新程序,都应该使用这些新的API。旧的java.util.Date应该完全不用。

但是在JDBC中,新的类好像没有反映出来。在PreparedStatement的绑定参数和ResultSet的获取参数中,那些方法仍然还是使用旧的java.sql.Date类,这个类继承自java.util.Date。而且java.sql.Date类只有一个接受long型变量的参数,这导致传参很麻烦。我不得不写下面这样非常笨的代码:

代码语言:javascript
复制
java.util.Date d=new java.util.Date();
java.sql.Date date=new java.sql.Date(d.getTime());

直到今天我看到爆栈上有个问题正好是问这的,只有一个回答,但是完美的解决了我和这位题主的疑问:为什么Java8不补齐缺失的JDBC处理方法

java.sql.Date这个类已经做出了一些改变,我们如果查看它的Java Doc话就会发现它在JDK1.8中增加了几个方法,来适应新API和自己的转换,这两个方法是 toLocalDate()valueOf(LocalDate date),用来执行java.sql.Datejava.time.LocalDate之间的转换。虽然java.sql.Date继承自过时的类java.util.Date,但是这个类我们仍然可以使用,只不过它继承自java.util.Date这一部分的方法我们最好不要使用。

在JDBC4.2规范中,我们甚至都不需要java.sql.Date类了,可以直接将LocalDate这些新类直接和PreparedStatement和ResultSet绑定,这需要通过setObject(int, localDate)getObject(int, LocalDate.class)这两个方法来实现。比如说MySQL的数据库驱动,只要是5.1版本的,就支持JDBC4.2,所以我们在这种驱动程序上可以直接进行这样的操作。有了这些新方法,旧类就可以直接弃用了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档