You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus调用Oracle存储过程返回数字串,如何适配WE8ISO8859P15编码获取XML

解决方法

你遇到的问题由两部分原因导致,按以下步骤修改即可:

1. 修复Clob读取逻辑(核心问题)

你当前的readClob方法逻辑错误:直接将读取到的字节十进制数值拼接为字符串,比如<对应的ASCII码是60,就会直接拼接"60",最终输出你看到的长数字串,这是导致问题的核心原因。
将readClob方法修改为如下实现,按WE8ISO8859P15对应的Java编码ISO-8859-15读取字节流并转为字符串:

private String readClob(Clob input) throws IOException, SQLException {
    // 自动关闭流避免资源泄漏
    try (InputStream stream = input.getAsciiStream();
         // 指定编码为ISO-8859-15 对应Oracle的WE8ISO8859P15
         InputStreamReader reader = new InputStreamReader(stream, "ISO-8859-15")) {
        char[] buffer = new char[4096];
        int readLen;
        StringBuilder result = new StringBuilder();
        while ((readLen = reader.read(buffer)) != -1) {
            result.append(buffer, 0, readLen);
        }
        return result.toString();
    }
}

2. 配置JDBC连接适配Oracle编码

在application.properties中补充Oracle JDBC连接的编码配置,确保驱动和数据库端编码匹配:

# 原有配置保留,新增以下配置
quarkus.datasource.jdbc.connection-properties.oracle.jdbc.charset=WE8ISO8859P15
quarkus.datasource.jdbc.connection-properties.oracle.jdbc.defaultNChar=true

你项目中已经引入了orai18nOracle国际化依赖,可支持WE8ISO8859P15编码的映射转换,无需额外新增依赖。
修改完成后重新运行项目,即可直接拿到解析后的XML字符串。

内容的提问来源于stack exchange,提问作者Cas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:15:02