返回顶部
首页 > 资讯 > 精选 >Java 8日期与数据库日期的映射关系是什么
  • 676
分享到

Java 8日期与数据库日期的映射关系是什么

2023-06-26 07:06:02 676人浏览 八月长安
摘要

Java 8日期与数据库日期的映射关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java8中有很多新型的日期类型,比传统的日期类型好用。使用什么和数据库的日期进行映射

Java 8日期与数据库日期的映射关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Java8中有很多新型的日期类型,比传统的日期类型好用。使用什么和数据库的日期进行映射,却是一个比较复杂的问题。

JDBC 4.2 规范

根据JDBC4.2的规范,Java日期类型和数据库日期类型关系如下:

Java 日期数据库日期
java.sql.DateDATE
java.sql.TimeTIME
java.sql.TimestampTIMESTAMP
java.util.CalendarTIMESTAMP
java.util.DateTIMESTAMP
java.time.LocalDateDATE
java.time.LocalTimeTIME
java.time.LocalDateTimeTIMESTAMP
java.time.OffsetTimeTIME_WITH_TIMEZONE
java.time.OffsetDatetimeTIMESTAMP_WITH_TIMEZONE

有两个是比较特别的。

  • TIMESTAMP_WITH_TIMEZONE:包含 Time Zone 的日期时间(DateTime),映射为OffsetDatetime。

  • TIME_WITH_TIMEZONE:包含 Time Zone 的时间(Time),映射为OffsetTime。

java8中新的日期类型代替旧日期类型

  • java.time.LocalDate代替java.sql.Date

  • java.time.LocalTime代替java.sql.Time

  • java.time.LocalDateTime代替java.sql.Timestamp

注意:JDBC4.2规范不支持Instant和ZonedOffsetDateTime

postgresql JDBC 实现

Java 日期数据库日期
java.time.LocalDateDATE
java.time.LocalTimeTIME[ WITHOUT TIME ZONE ]
java.time.LocalDateTimeTIMESTAMP [ WITHOUT TIME ZONE ]
java.time.OffsetDatetimeTIMESTAMP WITH TIME ZONE

除了不支持Instant和ZonedOffsetDateTime外,OffsetTime也不支持。

参考:PostgreSQL JDBC: Using Java 8 Date and Time classes

PostgreSQL 数据库

timestamp类似LocalDateTime,只是本地时间。要确保JVM的时区和数据库的时区一致,否则会出现时差。

timestamptz是TIMESTAMP WITH TIME ZONE类型,但并没有保存 Time Zone 信息,只是简单的使用UTC标准时间。理由是Time Zone只用于显示,而如何显示时间应该由应用程序处理,没有必要保存到数据库中。

mysql-">Mysql 数据库

mysql甚至没有提供TIMESTAMP WITH TIME ZONE的类型,日期时间类型只有DateTime,没有 Time Zone 概念。必须使用jdbc连接中的serverTimezone确定时区。如jdbc:mysql://localhost/ujcms?serverTimezone=Asia/Shanghai

oracle 数据库

Date:本地时间。精度到秒。
Timestamp:本地时间。精度可以到纳秒。
TIMESTAMP WITH TIME ZONE:标准的OffsetDateTime,保存有Time Zone 信息。
TIMESTAMP WITH LOCAL TIME ZONE:和PostgresSQL的timestamptz类似,只保存标准的UTC时间,然后根据本地的 Time Zone 进行计算。

SQL Server 数据库

datetime2:本地时间。
datetimeoffset:标准的OffsetDateTime,保存有 Time Zone 信息。

JPA

JPA对日期的支持于JDBC规范是一致的。

Hibernate

Hibernate在JPA的基础上进行了扩展,支持Instant、ZonedDateTime。

但所有的Java8日期类型最后都转换成Timestamp进行处理。也就是说即使数据库支持TIMESTAMP WITH TIME ZONE并保存了时区信息,Hibernate也会将其丢弃,转而使用JVM的时区(时间是确保正确的)。

mybatis

支持Instant。转为Timestamp处理。

支持ZonedDateTime,直接使用原生的。兼容性差,如PostgreSQL JDBC不支持这种类型的,会报错。

Freemarker

使用freemarker-java-8进行格式化。

支持OffsetDateTime和ZonedDateTime的格式化,使用对象中自带的时区。

不支持Instant格式化,会直接调用toString()方法。官方说会增加Instant的支持,但已经3年没有发布新版本。

Thymeleaf

支持OffsetDateTime和ZonedDateTime的格式化,使用对象中自带的时区。

支持Instant格式化,使用JVM默认时区。

Jackson

  • Instant:2008-08-08T08:00:00Z

  • OffsetDateTime:与Instant一致。

  • ZondDateTime:2008-08-08T08:00:00Z[UTC]

如何选择

LocalDateTime虽然日期显示友好,但时区不确定,取决于JVM的时区。这导致时间也不确定,不同时区的JVM访问数据库,会得到不一样的时间。这非常致命,使用LocalDateTime一定要确保JVM和数据库的时区一致。

按照JDBC规范,毫无疑问应该选择OffsetDateTime。OffsetDateTime是一个好选择,具有像LocalDateTime一样直观友好的日期显示,又能确保时间的确定性。

但由于MySQL和PostgreSQL都没有提供真正的保存时区的TIMESTAMP WITH TIME ZONE,OffsetDateTime其实已经降级为Instant(PostgresSQL的timestamptz本质上就是Instant)。特别是PostgreSQL提供的是一个标准UTC时区,而实际需要的是UTC+8的北京时间,这导致在Freemarker和Thymeleaf中都无法得到正确的格式化。

考虑到数据库兼容性的问题,Instant似乎是一个更好的选择。但JDBC4.2及JDBC4.3都不支持Instant,且Instant在Freemarker中也无法格式化。

大部分数据库都提供真正的TIMESTAMP WITH TIME ZONE,即使是MySQL也能通过设置serverTimezone得到时区正确的OffsetDateTime,再加上JDBC规范的要求,OffsetDateTime还是首选。至于PostgreSQL的兼容性,可以在FreeMarker和Thymeleaf中自定义日期格式化方法。

Java是什么

Java是一门面向对象编程语言,可以编写桌面应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序。

看完上述内容,你们掌握Java 8日期与数据库日期的映射关系是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Java 8日期与数据库日期的映射关系是什么

本文链接: https://lsjlt.com/news/307576.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java 8日期与数据库日期的映射关系是什么
    Java 8日期与数据库日期的映射关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java8中有很多新型的日期类型,比传统的日期类型好用。使用什么和数据库的日期进行映射...
    99+
    2023-06-26
  • C#日期型数据是什么
    这篇文章主要讲解了“C#日期型数据是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#日期型数据是什么”吧!C#日期型数据编程的过程中,通常需要将C#日期型数据按照一定的格式输出,当然,...
    99+
    2023-06-17
  • mybatis Plus实体类与数据库表映射关系是什么
    这篇“mybatis Plus实体类与数据库表映射关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mybatis P...
    99+
    2023-06-26
  • Java怎么生成日期时间存入Mysql数据库
    这篇文章主要介绍“Java怎么生成日期时间存入Mysql数据库”,在日常操作中,相信很多人在Java怎么生成日期时间存入Mysql数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么生成日期时间存...
    99+
    2023-06-29
  • PHP 对象关系映射与数据库抽象层中对象-关系映射的最佳实践
    php 对象关系映射 (orm) 最佳实践包括命名一致性、适当映射、注释、避免硬编码、利用查询生成器和监视数据库架构更改。实操案例中,doctrine orm 框架可用于连接 mysql...
    99+
    2024-05-06
    orm 数据库抽象 mysql composer
  • Oracle数据库中修改系统日期的操作指南
    Oracle数据库是一种功能强大的关系型数据库管理系统,它具有许多用于管理数据库的功能和命令。其中,修改系统日期是一个常见但又比较特殊的操作,需要谨慎处理。本文将为您提供在Oracle...
    99+
    2024-03-09
    操作指南 修改系统日期
  • informix日期函数转换的方法是什么
    在Informix中,可以使用以下几个日期函数进行日期转换:1. `to_date()`:将字符串转换为日期类型。语法如下:```s...
    99+
    2023-05-13
    informix日期函数 informix
  • oracle中字符串转日期的函数是什么
    在 oracle 中,可以通过 to_date 函数将字符串转换为日期格式,语法为 to_date(string_expression, format_mask)。format_mask...
    99+
    2024-05-07
    oracle
  • Java生成日期时间存入Mysql数据库的实现方法
    目录一、创建数据库标准二、数据库表结构三、使用步骤一、创建数据库标准 1.表的必备三个字段:id、gmt_create、gmt_modified 2.gmt_create是创建时间,...
    99+
    2024-04-02
  • oracle数据库怎么查询表空间的创建日期
    要查询 oracle 数据库中表空间的创建日期,可以使用 dba_tablespaces 视图,通过查询 tablespace_name 和 created 列即可获取表空间名称和创建日...
    99+
    2024-04-18
    oracle
  • java字符串格式化成日期的方法是什么
    Java中可以使用SimpleDateFormat类来格式化字符串为日期。 示例代码如下: import java.text.Sim...
    99+
    2023-10-23
    java
  • 关系型数据库与非关系型数据库的区别是什么
    今天就跟大家聊聊有关关系型数据库与非关系型数据库的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。关系模型指的就是二维表格模型,而一个关系型...
    99+
    2024-04-02
  • PHP 对象关系映射与数据库抽象层中多数据库支持的实践
    使用 php 进行多数据库支持,可以使用 orm(对象关系映射)和 dal(数据库抽象层)工具。orm 示例:doctrine 允许通过配置连接参数支持多个数据库,例如 mysql 和 ...
    99+
    2024-05-07
    php orm mysql
  • Python3 JSON数据解析、日期和时间转换的方法是什么
    这篇文章主要介绍“Python3 JSON数据解析、日期和时间转换的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python3 JSON数据解析、日期和时间转换的方法...
    99+
    2023-07-05
  • 在JAVA中将日期和时间插入到MySQL数据库的方法
    在JAVA中将日期和时间插入到MySQL数据库的方法 方法一:使用java.sql.Timestamp这个类来进行转换(推荐) java.util.Date date = new Date();//获...
    99+
    2023-10-12
    数据库 java mysql
  • MySQL中的日期时间类型与格式化方式是什么
    本篇内容介绍了“MySQL中的日期时间类型与格式化方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • 数据库redis Db与键过期删除方法是什么
    本篇内容主要讲解“数据库redis Db与键过期删除方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库redis Db与键过期删除方法是什么”吧!一...
    99+
    2024-04-02
  • 什么是数据库的三级模式和两级映射
    本篇内容主要讲解“什么是数据库的三级模式和两级映射”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是数据库的三级模式和两级映射”吧! ...
    99+
    2024-04-02
  • Docker数据管理与端口映射的方法是什么
    本文小编为大家详细介绍“Docker数据管理与端口映射的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Docker数据管理与端口映射的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Doc...
    99+
    2023-06-28
  • PHP 对象关系映射与数据库抽象层与微服务架构的集成
    通过将 orm 和 dal 集成到微服务中,可以实现以下目标:使用面向对象的编程方式访问数据;抽象数据库实现,在不同数据库系统之间轻松切换;提高代码可重用性,将数据访问逻辑隔离并跨微服务...
    99+
    2024-05-07
    php orm mysql oracle access c# 数据访问
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作