java.util.Date 与 java.sql.Date

2024-03-17

java.util.Date vs java.sql.Date:什么时候使用哪个以及为什么?


恭喜,您已经解决了 JDBC 中我最讨厌的问题:日期类处理。

基本上数据库通常至少支持three日期时间字段的形式,包括日期、时间和时间戳。其中每一个在 JDBC 中都有一个对应的类他们每个人都延伸java.util.Date http://docs.oracle.com/javase/8/docs/api/index.html?java/util/Date.html。这三个的快速语义如下:

  • java.sql.Date http://docs.oracle.com/javase/8/docs/api/index.html?java/sql/Date.html对应于 SQL DATE 这意味着它存储年、月、日 while 小时、分钟、秒和毫秒被忽略。此外sql.Date与时区无关。
  • java.sql.Time http://docs.oracle.com/javase/8/docs/api/index.html?java/sql/Time.html对应于 SQL TIME 并且应该是显而易见的,仅包含以下信息小时、分钟、秒和毫秒.
  • java.sql.Timestamp http://docs.oracle.com/javase/8/docs/api/index.html?java/sql/Timestamp.html对应于 SQL TIMESTAMP,它是精确到纳秒的日期(注意util.Date只支持毫秒!)具有可定制的精度。

使用与这三种类型相关的 JDBC 驱动程序时最常见的错误之一是类型处理不正确。这意味着sql.Date是特定于时区的,sql.Time包含当前的年、月、日等等。

最后:使用哪一个?

实际上取决于字段的 SQL 类型。PreparedStatement具有所有三个值的设置器,#setDate()成为一个sql.Date, #setTime() for sql.Time and #setTimestamp() for sql.Timestamp.

请注意,如果您使用ps.setObject(fieldIndex, utilDateObject);你实际上可以给一个正常的util.Date对于大多数 JDBC 驱动程序来说,它们会很高兴地吞噬它,就好像它是正确的类型一样,但是当您随后请求数据时,您可能会注意到实际上丢失了一些东西。

我真的是说根本不应该使用任何日期。

我的意思是将毫秒/纳秒保存为普通长整型并将它们转换为您正在使用的任何对象(强制性的乔达时间插头 http://www.joda.org/joda-time/)。一种可行的方法是将日期组件存储为一个长组件,将时间组件存储为另一个组件,例如现在是 20100221 和 154536123。这些幻数可以在 SQL 查询中使用,并且可以从数据库移植到另一个数据库,将使您完全避免 JDBC/Java Date API 的这一部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.util.Date 与 java.sql.Date 的相关文章

  • 展平具有未知列数的子/父数据

    我正在努力寻找存储和表示 SQL MySQL DB 和 C Windows 表单中的数据的最佳方法 我的数据映射到如下所示的类时 public class Parent public string UniqueID get set Key
  • java中%%是什么意思?

    我是一名 PHP 程序员 想知道这行代码的含义 System out printf exp 3f is 3f n x Math exp x 3f 3f n 和逗号 x 是什么意思 它与C类似printf http java sun com
  • 在 Spring Webflux 中执行阻塞 JDBC 调用

    我使用 Spring Webflux 和 Spring data jpa 使用 PostgreSql 作为后端数据库 我不想在进行数据库调用时阻塞主线程 例如find and save 为了实现同样的目标 我有一个主调度程序Controll
  • 我从 String placeName = placeText.getText().toString(); 收到空指针异常

    您好 想从编辑文本中获取地名并在地图上标记 这是我的代码 其中出现空指针异常 请帮助我应该做什么以及哪里出错了 因为我从对话框中的编辑文本字段获取地名 View layout View inflate this R layout alert
  • 参考接口创建对象

    引用变量可以声明为类类型或接口类型 如果变量声明为接口类型 则它可以引用实现该接口的任何类的任何对象 根据上面的说法我做了一个理解上的代码 正如上面所说声明为接口类型 它可以引用实现该接口的任何类的任何对象 但在我的代码中显示display
  • Mockito mockStatic 无法解析符号

    我正在使用 Spring Boot 并在单元测试中 我试图模拟Files delete myFile toPath method 为此 我尝试使用Mockito mockStatic 方法 但是当我尝试使用它时 我的 IDE Intelli
  • python 中的子进程调用以使用 JAVA_OPTS 调用 java jar 文件

    示例代码 import subprocess subprocess call java jar temp jar 如何在上面的命令中指定JAVA OPTS 当我使用上述命令时 我收到 java lang OutOfMemoryError 无
  • 对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而出现异常

    我正在使用最新的 2 13 0 版本的 jackson 当我尝试解析 YAML 文件时 出现此异常 java lang NoSuchMethodError com fasterxml jackson core io ContentRefer
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • Java:如果数组大小未知,如何初始化?

    我要求用户输入 1 到 100 之间的一些数字并将它们分配到一个数组中 数组大小未初始化 因为它取决于用户输入数字的次数 我应该如何分配数组长度 如果用户输入 5 6 7 8 9 5 个数字 则 int list becomes int l
  • @Transactional 注解属于哪里?

    如果您将 Transactional in the DAO类和 或其方法 或者注释使用 DAO 对象调用的服务类是否更好 或者注释两个 层 是否有意义 我认为事务属于服务层 它是了解工作单元和用例的人 如果您将多个 DAO 注入到需要在单个
  • 有没有办法删除 JShell 中的导入?

    我正在发现 JShell 并且发现默认添加的导入 jshell gt imports import java io import java math import java net import java nio file import j
  • 为什么从类构造函数调用的方法应该是最终的? [复制]

    这个问题在这里已经有答案了 我是一名 Java 新手 我试图理解 Oracle 网站教程中的以下行 https docs oracle com javase tutorial java IandI final html https docs
  • 图标和导航视图之间的左边距

    我必须在图标和图标之间添加左边距NavigationView 如下图中箭头所示 我知道根据谷歌规范 这个边距必须有16dp但我需要改变它 我努力了
  • 莫基托。验证方法参数是特定类

    我有一个方法 void putObject
  • Java 中的连接路径

    In Python我可以连接两条路径os path join os path join foo bar gt foo bar 我正在尝试在 Java 中实现相同的目标 而不用担心是否OS is Unix Solaris or Windows
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • java - 简单计算在多线程中比在单线程中花费更长的时间

    我试图了解如何利用多线程 我写了一个简单的程序来增加i 比方说 使用两种方式 400 000 次 单线程方式 0 到 400 000 和多线程方式 在我的例子中 4 次 0 到 100 000 线程数等于Runtime getRuntime
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie

随机推荐