当前位置: 首页 > news >正文

oracle 数据库字段类型为NUMBER(5,2)时,并且数据库值为0.1,为什么Java执行SQL查出来时为“.1“?

在 Oracle 数据库中,当字段类型为 NUMBER(5,2) 且存储的值为 0.1 时,Java 程序查询结果可能显示为 ".1"(省略前导零),这是由 Oracle JDBC 驱动默认的数字格式化行为 导致的。以下是原因分析和解决方案:


原因分析

  1. Oracle 的 NUMBER 类型特性

    • NUMBER(5,2) 表示最多 5 位数字,其中 2 位是小数(范围:-999.99999.99)。
    • 当存储 0.1 时,实际存储的是精确值 0.10(补全小数位到 2 位),但查询时会省略末尾的零。
  2. JDBC 驱动的默认格式化

    • Oracle JDBC 驱动(如 ojdbc8)在返回 NUMBER 类型时,默认会去除前导零(如 0.1".1"),这是为了减少不必要的字符。
  3. Java 数据类型映射

    • NUMBER 字段会被 JDBC 驱动映射为 BigDecimalDouble,而 BigDecimal.toString() 默认会省略前导零。

解决方案

方法1:在 SQL 查询中显式格式化

使用 TO_CHAR 函数强制保留前导零:

SELECT TO_CHAR(your_number_column, '0.00') FROM your_table;

结果会固定为 "0.10"(字符串类型)。

方法2:在 Java 中格式化结果

将查询结果转换为 BigDecimal 并手动格式化:

import java.math.BigDecimal;
import java.text.DecimalFormat;

BigDecimal value = resultSet.getBigDecimal("your_column");
DecimalFormat df = new DecimalFormat("0.00"); // 强制保留两位小数
String formattedValue = df.format(value);     // 输出 "0.10"
**方法3:修改 JDBC 驱动的格式化行为 **

在连接字符串中添加参数,关闭驱动的默认格式化:

String url = "jdbc:oracle:thin:@localhost:1521:ORCL?oracle.jdbc.defaultNumericChar=true";

注意此参数可能因驱动版本不同而失效,建议优先使用方法1或2。

方法4:直接处理结果集

如果查询结果已经是字符串形式的 ".1",可以手动补零:

String rawValue = resultSet.getString("your_column");
if (rawValue.startsWith(".")) {
    rawValue = "0" + rawValue; // ".1" → "0.1"
}

验证数据库实际存储值

执行以下 SQL,确认数据库中实际存储的值:

SELECT DUMP(your_number_column) FROM your_table;
  • 输出示例:Typ=2 Len=2: 193,11(表示存储的是 0.10,但查询时被格式化)。

相关文章:

  • git分支合并信息查看
  • Spring MVC 国际化机制详解(MessageSource 接口体系)
  • 无人机镜头镜片进行防雾测试的意义和目的
  • DeepSeek 在金融领域的应用解决方案
  • 使用 kind 创建 K8s 集群并部署 StarRocks 的完整指南
  • 树莓派5从零开发至脱机脚本运行教程——5.硬件模块测试篇
  • SpringAOP新链浅析
  • Android中系统服务和bind的应用服务有什么区别?
  • MATLAB基于统计特征与指数退化模型的风力发电机高速轴承剩余寿命预测
  • rustdesk自建服务器怎么填写客户端配置信息
  • Go 语言范围 (Range)
  • 课程7. 机器学习的集成算法
  • zk基础—zk实现分布式功能
  • Spring 核心注解深度解析:@Autowired、@Repository 与它们的协作关系
  • VSCode英文翻译插件:变量命名、翻单词、翻句子
  • 正点原子 迷你 miniSTM32用ST link烧录后程序不运行(已解决)
  • 一种用于基于扩散磁共振成像(MRI)的微观结构估计的外梯度与噪声调谐自适应迭代网络|文献速递-深度学习医疗AI最新文献
  • 蓝桥杯——走迷宫(BFS)
  • QT QML布局
  • LabVIEW 中串口设备与采集卡的同步精度
  • wordpress 分类图片/seo推广培训学费
  • 北京的做网站的公司/重庆百度推广排名
  • 动态网站开发小结/产品网络推广方案
  • 长春做网站优化哪家好/站长之家seo信息
  • 深圳o2o网站建设/交换链接或称互惠链接
  • 云南工程建设总承包公司网站/如何百度推广