首页
学习
活动
专区
圈层
工具
发布

升级Oracle导致Java程序日期截断的场景

同事碰到个问题,他们的数据库从Oracle 11g升级到Oracle 19c,对应Java代码要将jdbc驱动从ojdbc14.jar升级到ojdbc7.jar,发现一个date参数的问题。...(1)ojdbc14.jar:DATE > java.sql.Date,转换后不带时分秒(时分秒是0:0:0)。...(2)ojdbc6.jar及之后版本:DATE > java.sql.Timestamp 转换后带时分秒。...但是因为这个系统有几十个微服务,SQL很多,如果一个一个改,工作量很大,还得每个业务逻辑都要排查,对方要求最好能通过配置解决,不改动Java的代码。...通过检索资料,MyBatis提供了使用自定义TypeHandler转换类型的功能,可以自己写个TypeHandler来对 DATE 类型做特殊处理: /\*\* \* Welcome to https

23700
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    oracle10g获取Date类型字段无时分秒解决办法!

    最近使用 ORACLE 10G,时间字段因需求,设为了DATE类型,发现hibernate用native SQL 查询或ibatis获取result.getObject()的时候显示不了时分秒,原来是JDBC...驱动自动把date映射为 Java.sql.date,故截断了时分秒信息,如果你使用9i或者11g 的驱动程序,就没有该问题,但是Oracle10g的JDBC驱动,你会发现没有时分秒 ,在Oracle9.2...也正是从oracle 9.2开始,内置数据类型DATE和TIMESTAMP在使用9i的JDBC驱动做查询时,DATE被映射为java.sql.Date,TIMESTAMP被映射为java.sql.Timestamp...从Oracle11开始,其JDBC驱动程序又重新开始回归为将内置类型DATE映射为java.sql.Timestamp(正如9.2之前的那样)。 ...所以,时分秒精度的丢失与hibernate无关,是oracle jdbc驱动的问题。 SO: 解决方法有以下两个: 1、换jdbc驱动 2、数据库中把data转换成timestamp类型

    1.9K50

    java8中,java.util.Date, java.sql.Date, java.time.LocalDate 的转换异常及处理

    参考链接: Java8中的java.util.StringJoiner java8中,java.util.Date, java.sql.Date, java.time.LocalDate 的转换异常及处理...  /**  *PreparedStatement绑定日期参数的时候,如果传入的是 java.util.Date,则会抛出如下异常 *  Caused by: java.lang.ClassCastException...: java.util.Date cannot be cast to java.sql.Date */ ps.setDate(2, (java.sql.Date) startDate);//抛异常 ps.setDate...(2, new java.sql.Date(startDate.getTime()));//正确方法  /**  *利用如下方式将Date类型转换为 java.time.LocalDate 类型时,如果...:1.8.0_172]  *将java.sql.Date 转换成 java.util.Date后,如下方法正常转换  */ LocalDate localSuspendDate = suspendDate.toInstant

    1.9K10

    Mybatis分页查询(通过SQL分页实现)

    Mybatis分页查询(通过SQL分页实现) 前言 实现有哪几种方式: 网页分页 (一次查询所有数据,加载到网页,那么适合数量小的操作) 服务器端分页 java程序中查询所有数据,网页需要哪一页...,就给哪一页数据,会撑爆java服务器,建议查询缓存优化 数据库分页 请求一页数据,查询数据库即可 本文采用Oracle中的rownum实现分页,数据表使用Oracle中Scott的EMP表...---- 一、搭建环境 目录结构 导入jar包 mybatis-3.2.7.jar ojdbc6.jar 数据库配置文件(db.properties) db.driver=oracle.jdbc.driver.OracleDriver...db.url=jdbc:oracle:thin:@10.25.164.149:1521:orcl db.username=scott db.password=123456 mybatis-config.xml...package net.neuedu.mybatis3.domain; import java.math.BigDecimal; import java.util.Date; public class

    4.3K20

    MyBatis中的JdbcType映射介绍

    大家好,又见面了,我是你们的朋友全栈君。 Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate、Mybatis等这些持久化支持。...项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文件定义SQL语句,当然JDBC也可以将SQL配置化,需要定制开发,MyBatis则直接支持这种方法。...简单来讲,MyBatis几乎屏蔽了所有JDBC代码,用一种简单的xml,或者注解,就能完成数据库交互。.../mybatis-3/apidocs/reference/org/apache/ibatis/type/JdbcType.html 另外,这篇文章,给出了JdbcType和Oracle以及MySQL,...相互之间的映射关系,比较详细,引自:http://blog.csdn.net/loongshawn/article/details/50496460 JdbcType Oracle MySql JdbcType

    1.1K10

    MyBatis框架(一)

    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数...Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement...中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。...使用步骤: 创建项目,导入Ojdbc.jar包和mybatis**.jar包, 设置数据库的信息的属性: 1 jdbc.username=test 2 jdbc.password=test 3 jdbc.url...=jdbc:oracle:thin:@localhost:1521:xe 4 jdbc.driver=oracle.jdbc.OracleDriver 配置mybatis的总配置文件: mybatis-config.xml

    1K50

    达梦数据库:日期查询 “null”(兼容性问题)解决方案

    1.2 初步排查步骤为定位问题根源,按照 “前端→接口→数据库→业务逻辑→数据库兼容性” 的排查链路开展验证:前端验证:通过浏览器开发者工具查看网络请求与响应数据,确认前端未对日期字段进行错误过滤或格式转换...:原 Oracle 查询中使用TO_CHAR(approval_date, 'YYYY-MM-DD')进行日期格式化,迁移到达梦后未替换为达梦支持的DATE_FORMAT(approval_date,...'YYYY-MM-DD')函数,导致日期字段查询失败;JDBC 驱动适配问题:该模块使用的 JDBC 连接配置仍为 Oracle 参数(如oracle.jdbc.driver.OracleDriver)...-- 显式指定类型处理器 -->(4)统一 API 响应日期格式通过配置全局消息转换器,统一日期字段返回格式(yyyy-MM-dd),避免前端因格式差异导致的解析问题:@Configurationpublic...,审查 SQL 函数(如 Oracle→达梦的函数替换)、JDBC 配置、数据类型映射的兼容性;提升自动化测试覆盖率:后端:为所有数据查询接口编写单元测试,新增 “数据库兼容性测试套件”,覆盖 Oracle

    52910

    面试Mybatis之类型处理器​(typeHandlers)

    Mybatis之类型处理器 无论是MyBatis在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java...java.util.Date DATE TimeOnlyTypeHandler java.util.Date TIME SqlTimestampTypeHandler java.sql.Timestamp...TIMESTAMP SqlDateTypeHandler java.sql.Date DATE SqlTimeTypeHandler java.sql.Time TIME ObjectTypeHandler...注意:使用上述的类型处理器将会覆盖已经存在的处理 Java 的 Boolean 类型属性和 NUMERIC 参数及结果的类型处理器。...要注意 MyBatis 不会通过窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 NUMERIC 类型的字段, 以使其能够绑定到正确的类型处理器上。

    1.4K30

    MyBatis TypeHandler详解:原理与自定义实践

    这个转换过程是根据Java类型和JDBC类型之间的映射关系来实现的。 转换后的值会被设置到PreparedStatement对象中对应的占位符上,以便数据库能够正确解析和执行SQL语句。 2....这个转换过程同样是根据Java类型和JDBC类型之间的映射关系来实现的。 转换后的值会被设置到Java对象中对应的属性上,以便应用程序能够正确处理和使用这些数据。 3....org.apache.ibatis.type.TypeHandler TypeHandler是一个接口,用于定义如何处理JDBC类型和Java类型之间的转换。...这些方法分别负责在SQL语句执行时将Java类型的参数转换成JDBC类型,以及在执行SQL查询后将JDBC类型的结果转换成Java类型。...通过自定义TypeHandler可以实现数据库类型之间的兼容转换。 六、总结 MyBatis的TypeHandler机制为Java类型和JDBC类型之间的转换提供了灵活且强大的支持。

    3.1K10

    如何使用java代码通过JDBC访问Sentry环境下的Hive

    java代码通过JDBC连接Hive(附github源码)》、《如何使用java代码通过JDBC连接Impala(附Github源码)》和《如何使用Java访问集成OpenLDAP并启用Sentry的Impala...和Hive》,关于Hive和Impala如何启用Sentry可以参考Fayson前面的文章《如何在CDH启用Kerberos的情况下安装及使用Sentry(一)》,《如何在CDH启用Kerberos的情况下安装及使用...Sentry(二)》和《如何在CDH未启用认证的情况下安装及使用Sentry》,在集群只启用了Sentry的情况下如何访问?...本篇文章主要介绍在集群只启用了Sentry后使用Java通过JDBC访问的区别以及在beeline命令行如何访问。...; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; /** *

    2.8K60

    1 Mybatis 框架 & Mybatis初级进阶篇

    /mybatis/ 介绍(Ibatis 3就叫MyBatis) MyBatis:是一款轻量级的ORM(对象-关系-映射)、半自动的持久层框架, 作用是: 将原来的 JDBC 的SQL 与 JAVA代码的硬编译...、高耦合转为SQL 与 JAVA分离:SQL语句有开发人员XML配置 功能边界清晰 :SQL的就写SQL,JAVA就写JAVA MyBatis的规范 原生配置,pom-Dao层-interface-dao-config-domainMapper...操作事务的方法 void commit() void rollback() 初级进阶篇 我们实际生产过程中 不会使用 传统方式 :通过在Service实现层进行 创建 Resources读取核心配置文件...#{}是预编译,而{}直接取出,有sql注入的风险的sql语句是与预编译 、是占位符形式的,然后执行的是将占位符复制的sql ,而{}直接是值,作用范围:字段名、表名不支持预编译,所以必须使用 Mybatis...java.sql.SQLException; import java.util.Date; /** * @author : zanglikun * @date : 2021/3/17 16:49

    74320

    Mybatis_day01

    解决问题: 数据库连接的获取和关闭我们可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。...第二步优化:SQL统一存取 问题描述: 我们使用JDBC进行操作数据库时,SQL语句基本都散落在各个JAVA类中,这样有三个不足之处: 第一,可读性很差,不利于维护以及做性能调优。...第四步优化:结果映射和结果缓存 问题描述: 执行SQL语句、获取执行结果、对执行结果进行转换处理、释放相关资源是一整套下来的。...jdbc类型转换,#{}可以有效防止sql注入。...${}表示拼接sql串,通过${}可以通过patameterType传入的内容拼接在sql中且不进行jdbc类型转换。

    1.3K70

    MyBatis--框架学习

    前言 SSM框架的最后一部分 简介 mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精 去处理加载驱动、创建连接、创建statement...mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。...采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。...例如需求:一个Java中的Date数据类型,想将之存到数据库的时候存成一个1970年至今的毫秒数,取出来时转换成java的Date,即java的Date与数据库的varchar毫秒值之间转换。...的Date类型数据转换为毫秒数存储起来: 测试,执行test7()测试方法,在控制台打印输出java的Date类型数据: plugins标签 MyBatis可以使用第三方的插件来对功能进行扩展,只需要导入相应的坐标

    85030

    MyBatis typeAliases & typeHandlers(3)

    String与varchar、char、text),所以我们把java对象转换为数据库值时,和把数据库的值转换成java对象,需要经过一定的转换,这两个方向的转换就要用到TypeHandler。...在我们常规使用时我们没做任何配置,为什么对象里的String属性,可以转换成数据库里的varchar字段?...有4个抽象方法必须实现,我们把它分成两类: set方法是从java类型转换成JDBC类型的,get方法是从JDBC类型转换成java类型的。...; import org.apache.ibatis.type.JdbcType; import java.sql.CallableStatement; import java.sql.PreparedStatement...; import java.sql.ResultSet; import java.sql.SQLException; /** * * 注意:需要使用mysql-connector 5.1.40以上才可解决

    95930
    领券