weblogic.jdbc.vendor.oracle.oraclethinclob,pl / sql过程为varchar2列返回3个问号('???')(wls 10.3.4 - weblogic...

我得到了以下代码,可以在OAS10上正常工作,从sql过程中获取自定义对象的数组:

Connection conn = null;

OracleCallableStatement stmt = null;

RequestsWrapper requestsWrapper = null;

conn = getConnection(DATASOURCE);

if (conn != null) {

stmt = (OracleCallableStatement) conn.prepareCall("{call packageName.procedureName(?, ?, ?)}");

stmt.registerOutParameter(3, OracleTypes.ARRAY, "V_ARRAY_OF_CUSTOM_OBJECTS");

stmt.setString(1, in1);

stmt.setString(2, in2);

stmt.execute();

ARRAY zahtjev = (ARRAY) cs.getArray(3);

RequestsWrapper requestsWrapper = new RequestsWrapper();

for (Object object : (Object[]) zahtjev.getArray()) {

if (object != null) {

CustomObject co = new CustomObject();

Object[] attributes = ((STRUCT) object).getAttributes();

co.setVarcharAttribute((String) attributes[0]);

co.setNumericAttribute(((BigDecimal) attributes[1]).intValue());

requestsWrapper.getObjectList().add(co);

}

}

}我必须将应用程序迁移到WLS 10.3.4。

当我试图执行现有的代码时,我得到一个异常:无法投射到oracle.sql.ARRAY。

我在WLS文档中发现:

For most extensions in the Oracle Thin driver, you can use the

standard technique as described in Using API Extensions to JDBC

Interfaces. However, the Oracle Thin driver does not provide public

interfaces for its extension methods in the following classes:

oracle.sql.ARRAY

oracle.sql.STRUCT

oracle.sql.REF

oracle.sql.BLOB

oracle.sql.CLOB

WebLogic Server provides its own interfaces to access the extension

methods for those classes:

weblogic.jdbc.vendor.oracle.OracleArray

weblogic.jdbc.vendor.oracle.OracleStruct

weblogic.jdbc.vendor.oracle.OracleRef

weblogic.jdbc.vendor.oracle.OracleThinBlob

weblogic.jdbc.vendor.oracle.OracleThinClob

所以,我遵循指示,我得到了以下代码

Connection conn = null;

OracleCallableStatement stmt = null;

RequestsWrapper requestsWrapper = null;

conn = getConnection(DATASOURCE);

if (conn != null) {

ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("V_ARRAY_OF_CUSTOM_OBJECTS", conn);

StructDescriptor structDescriptor = StructDescriptor.createDescriptor("T_CUSTOM_OBJECT", conn);

stmt = (OracleCallableStatement) conn.prepareCall("{call packageName.procedureName(?, ?, ?)}");

stmt.registerOutParameter(3, OracleTypes.ARRAY, "V_ARRAY_OF_CUSTOM_OBJECTS");

stmt.setString(1, in1);

stmt.setString(2, in2);

stmt.execute();

Array request = stmt.getArray(3);

OracleArray requestOracleArray = ((weblogic.jdbc.vendor.oracle.OracleArray)request).getOracleArray();

Datum[] datumArray = ((weblogic.jdbc.vendor.oracle.OracleArray)request).getOracleArray();

RequestsWrapper requestsWrapper = new RequestsWrapper();

for (Datum object : datumArray) {

if (object != null) {

CustomObject co = new CustomObject();

Object[] attributes = ((Struct) object).getAttributes();

co.setVarcharAttribute((String) attributes[0]);

co.setNumericAttribute(((BigDecimal) attributes[1]).intValue());

requestsWrapper.getObjectList().add(co);

}

}

}和数字属性映射OK,但是,而不是varchar2属性,我有'???'。

有没有人有类似的问题?

提前致谢。

编辑:我发现在几页信息orai18n.jar应该被添加到服务器类路径。但它对我不起作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值