繁体   English   中英

如何从weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB获取字符串?

[英]How to get String from weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB?

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

上下文:我想使用以下选择从数据库中提取xml值并在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()包装。
  • 如果不使用getClobVal()则会返回oracle.sql.Opaque ,但我也无法将其转换为任何内容。

代码 :使用getClobVal()

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

我找不到从该对象获取字符串的方法,有什么主意吗?

编辑:我不能禁用Weblogic包装。 我正在考虑在数据库方面进行一些变通以获取Blob。

在WebLogic控制台中,禁用数据类型的包装(在Connection Pool > Advanced ,请参见此处 )。 重新启动服务器,现在您将获得oracle.sql.CLOB对象,而不是weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB对象。

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

由于无法解包或强制转换对象,最终我自己在数据库中工作:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM