有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用ApacheCamel框架将数据持久化为Oracle DB中的BLOB/CLOB数据类型

需要使用apachecamel框架将数据(XML)存储到oracle数据库中的BLOB数据类型中。 执行普通查询很好。但当我试图将数据持久化到BLOB中时,oracledb需要一个兼容的类型。 我尝试使用utl\u raw。尝试将原始数据转换为BLOB兼容类型时,将\u强制转换为\u raw

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

有人能告诉我如何使用ApacheCamel将超过2048个字符的数据存储在BLOB数据类型中吗

非常感谢您的帮助


共 (1) 个答案

  1. # 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);