栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JOOQ Oracle Number精度和Java数字映射

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JOOQ Oracle Number精度和Java数字映射

Java的整数类型与Oracle的

NUMBER
类型不是完美匹配。本质上,有两种方法可以在世界之间进行映射,但都不完美:

  • 现状: 严格小于
    NUMBER(3)
    ->
    Byte

这样可以确保始终可以将SQL值读取为其Java类型。某些Java值可能无法写入SQL类型。

  • 替代方法:
    Byte
    ->
    NUMBER(3)
    或更少。

这将确保

byte
始终可以将Java值写入数据库。但是,某些DB值可能无法读取到Java类型中。

由于以下假设,jOOQ默认为第一个:

  • jOOQ通常用作“数据库优先” API
  • 大多数数据是从数据库读取的,而不是写入数据库的

默认行为

在jOOQ
3.8.4中,以下逻辑得以实现

DefaultDataType.getNumericClass()

// Integersif (scale == 0 && precision != 0) {    if (precision < BYTE_PRECISION) {        return Byte.class;    }    if (precision < SHORT_PRECISION) {        return Short.class;    }    if (precision < INTEGER_PRECISION) {        return Integer.class;    }    if (precision < LONG_PRECISION) {        return Long.class;    }    // Default integer number    return BigInteger.class;}// Non-integerselse {    return BigDecimal.class;}

和:

int LONG_PRECISION    = String.valueOf(Long.MAX_VALUE).length();    // 19int INTEGER_PRECISION = String.valueOf(Integer.MAX_VALUE).length(); // 10int SHORT_PRECISION   = String.valueOf(Short.MAX_VALUE).length();   // 5int BYTE_PRECISION    = String.valueOf(Byte.MAX_VALUE).length();    // 3

覆盖默认

如果在某些情况下(例如)

NUMBER(3)
用于存储
byte
数字
127
,则可以通过在代码生成阶段指定重写数据类型来覆盖此默认值。在此处记录:

http://www.jooq.org/doc/latest/manual/pre-generation/data-type-
rewrites



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号