如何从weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB获取String?

问题描述 投票:1回答:2

环境:Oracle 11g,Weblogic 9.2,Java 4,驱动程序:oracle.jdbc.OracleDriver

上下文:我想从数据库中提取xml值并使用以下select中的结果处理Java:

SELECT EXTRACT(XML_TEXT, 'PATH/TO/XML/VALUE/text()').getClobVal() AS VALUE 
FROM MYTBALE WHERE id =xxxx;

问题:在SQL Developer中,我确实可以看到检索到的字符串很好,但在Java中:

  • 如果我使用getClobVal()函数,Weblogic将返回一个weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB类型的包装对象,我无法进行转换或解包。
  • 如果我不使用getClobVal()返回oracle.sql.Opaque,我也无法投入任何东西。

代码:使用getClobVal()

...
HashMap <String, Object> element = (HashMap) iter.next();
String value = (unwrap & cast in some way ) element.get("VALUE");
...

我找不到从该对象获取字符串的方法,任何想法?

编辑:我无法禁用Weblogic包装。我正在考虑在数据库方面做一些解决方法来获得blob。

java oracle weblogic clob
2个回答
0
投票

在WebLogic控制台中禁用数据类型的换行(在Connection Pool - > Advanced下,请参阅here)。重新启动服务器,现在你将得到一个oracle.sql.CLOB对象而不是weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB对象。

编辑:对于该特定方法/类,您可以使用应返回未包装对象的特定供应商连接(getVendorConnection() method)。


0
投票

由于我无法打开或转换对象,我最终在数据库中自行工作:

create or replace procedure MANAGE_DOCUMENT(
  pSomeParam IN someTable.someColumn%TYPE,#if we need some param.
  pError OUT VARCHAR2
  )IS
  vResult BLOB;
  vDoc CLOB;

  begin
    pError := '';

    #extract base64 document
    SELECT EXTRACT(myColumn, 'xPath/to/the/element/text()').getClobVal()
    into vDoc
    FROM myTable WHERE someCondition;

    #check if doc exists
    IF vDoc IS NULL THEN
      pError :='Document not found';
    ELSE
      #decode and get blob
      vResult := utl_raw.cast_to_raw(vDoc);
      #do inserts or whatever        
      END IF;
    END IF; 
end MANAGE_DOCUMENT;
© www.soinside.com 2019 - 2024. All rights reserved.