首页 新闻 会员 周边 捐助

JAVA处理postgresql 的numeric类型时随机触发异常应如何处理

0
悬赏园豆:40 [待解决问题]

JAVA 在处理 numeric 类型(如期初金额)时,底层接收数据库返回的值 有时会随机 变成小于8个字节的情况,导致Java执行 numeric转换时,小于8个字节就报异常:

数据库结构:

mybatis 语句如下:

<select id="getInitMoney" resultType="java.lang.String">
    SELECT /*+ set(query_dop 16) */
        COALESCE(SUM(ca.js_money),0)::numeric(20,6) as js_money  FROM v_check_account ca
    WHERE
        ca.corp_id = #{query.corpId,jdbcType=BIGINT}
        AND ca.trader_id = #{query.traderId,jdbcType=BIGINT}
        AND ca.acc_date &lt; #{query.startDate,jdbcType=INTEGER}
</select>


接口:
String getInitMoney(@Param("query") CheckAccountQuery query);

处理方式:
String initStr = reportDao.getInitMoney(query);--这行报异常
BigDecimal init = BigDecimal.valueOf(Double.parseDouble(initStr));

这个要怎么处理才好哇。它就是随机的,有时异常,有时又正常。
我查deepseek,说是 可能3种情况:

1、高斯数据库驱动版本过低(目前postgresql的依赖包是42.7.5,我搜了下已经是最新的了);

2、联系数据库管理员,确认是否配置numeric返回8个字节以上(等待答复);
3、这个试过不行,即使将自己处理到8位以上,还会其他可能异常等着:

以便以谢的主页 以便以谢 | 初学一级 | 园豆:81
提问于:2025-04-03 10:42
< > 豆包AI编程
分享
所有回答(1)
0

你这不是格式的问题,这明明是字符串的 0.000, 你应该调用字符串的转换,不应该调用bytes的转换
mybatis不熟悉,不清楚怎么个转换,不过这里直接string转BigDecimal就行了,不需要经过bytes.
试试resultType用java.math.BigDecimal行不行.

www378660084 | 园豆:1459 (小虾三级) | 2025-04-03 17:44

哎,是 “/*+ set(query_dop 16) */” 的问题,去掉了 转换字节流的问题就好了,但是查询会很慢。
询问华为说建议换个 高斯数据库驱动看看,还在研究官方文档中。。

支持(0) 反对(0) 以便以谢 | 园豆:81 (初学一级) | 2025-04-08 09:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册
Top