使用Apache Camel Framework将数据保存到Oracle DB中的BLOB / CLOB数据类型中

时间:2016-09-13 09:25:44

标签: java oracle apache-camel blob clob

需要使用 Apache Camel 框架将数据(XML)存储到oracle DB中的 BLOB数据类型。 执行普通查询很好。但是当我试图将数据保存到BLOB时,oracle DB想要一个兼容的类型。 尝试将原始数据转换为BLOB兼容类型时,我尝试使用 utl_raw.cast_to_raw

这适用于较小的数据但是当数据很大时就像一个大的请求XML 超过2048个字符,错误 SQL错误:ORA-06502:PL / SQL:数字或值错误:抛出原始变量长度

有人可以帮助让我知道如何使用Apache Camel将超过2048个字符的数据存储在BLOB数据类型中吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这是一个在使用HSQLDB测试时运行良好的例子(我没有方便的Oracle数据库进行测试,但它的工作原理相同):

// This is just to have some relatively large ammount of data to insert in the BLOB, details don't matter
private static final byte[] LARGE_DATA.getBytes(StandardCharsets.UTF_8);
static {
    final StringBuilder builder = new StringBuilder(10000);
    for (int i = 0; i < 4000; i++) {
        builder.append('a');
    }
    LARGE_STRING = builder.toString();
}

from("direct:clobTest")
.process(new Processor() {
    @Override
    public void process(Exchange exchange) throws Exception {
        exchange.getIn().setHeader("myParam", LARGE_DATA);
    }
})
.to("sql:INSERT INTO clob_table(clob_col) VALUES(:#myParam)");

或者,它也适用于输入流而不是字节数组:

final InputStream is = new ByteArrayInputStream(LARGE_DATA);
exchange.getIn().setHeader("myParam", is);