Java 8中的java.sql.Date与Java 6相比
我知道java.sql.Date应该将小时,分钟,秒和毫秒设置为零,以符合标准SQL日期的定义.这记录在here(Java 8中相同). 我也知道Oracle DATE type确实有YEAR,MONTH,DAY,HOUR,MINUTE和SECOND这些时间字段.但没有分数秒和时区. 我注意到Java 6和Java 8中的相同查询行为不一样:
绑定到
>使用Java 6,我找到了一个值, 在我的数据库中,日期的小时,分??钟,秒为零.我们可以查看以下查询:
这给了:
所以,我的理解是: >在Java 6中,在数据库上启动查询之前, 我无法找到有关此行为的文档. 任何人都可以确认或解释吗? 作为解决方法,我使用它,如here所述: 最佳答案
虽然我没有解释,但是说很多人用最新一代的Oracle驱动程序报告了问题和违反JDBC的行为,我可以说你滥用这些类.还有更好的课程.
java.sql.Date是仅限日期的 您在Java端选择了错误的类.虽然 这个类是一个糟糕的设计,一个糟糕的黑客,继承自java.util.Date,同时告诉你忽略该继承事实. java.sql.Timestamp是日期和时间
从最早的Java版本开始,一大堆旧的日期时间类是一个勇敢的行业首次尝试解决日期时间处理问题,但它们不足.它们的设计很糟糕,令人困惑,也很麻烦.避免它们:java.util.Date,java.util.Calendar,java.util.GregorianCalendar,java.text.DateFormat,java.text.SimpleDateFormat.如果可能的话,也要避免使用java.sql类型.而是使用java.time类. JDBC 4.2 从JDBC 4.2开始,您的JDBC驱动程序可能能够直接从您的数据库访问java.time类型. PreparedStatement :: setObject和ResultSet :: getObject方法可能能够将数据库中的日期时间值作为java.time对象呈现.
…也许…
如果您的驱动程序不那么强大,那么请简单地转换为java.sql类型并立即转换为java.time.使用java.time完成所有业务逻辑.仅适用于与数据库交换数据的java.sql类型.要转换为/从java.time,请查找添加到旧类的新方法.例如, 这里我们从ResultSet中提取java.sql.Timestamp并立即将其转换为Instant.您可能希望在两行而不是一条组合行上执行此操作以进行调试.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为什么Java使用堆数据结构来存储对象?
- 如何使用libgdx获取手机语言?
- Java:在一段时间内做某事
- java – 当我调用“new Object()”而不存储返回时,返回的对
- 为什么Java的scheduleWithFixedDelay使用Runnable而不是Fut
- java – 为什么应该尝试在已检查的异常上抛出未经检查的异常
- java – 使用Apache PDFBox添加文本时如何移动到下一行
- JSP PageContext.getSession()方法:返回当前的Session对象
- 如何使用java在for循环中获取当前和下一个arraylist索引
- Dart的快照和Java字节码有什么区别?