java 侧的 CLOB 值变为空
CLOB value turn into empty in java side
我想获取数据类型为CLOB的列的值。在 Java 方面,我正在获取结构的属性,这些属性来自调用 "get_val" 的我们的过程。尽管程序不 return 为空,但 attr[4] 为空。它适用于某些 CLOB 属性,但有时 return 为空 属性。
我确定它是空的,因为当我尝试发送 attr[4] 的长度时。它显示“0”。但是从程序来看它显示了38个符号。
这可能是什么原因?我该如何解决?
public ValueEntity getAttributeValue(String token, Long objectId, Integer attrId, Date bankDate) throws SQLException, IOException{
try{
createContext(token,true);
ocstmt.close();
ocstmt = (OracleCallableStatement) oracleConnection.prepareCall("{ ? = call package.get_val(?,?,?) }");
ocstmt.registerOutParameter(1, OracleTypes.STRUCT, "T_VAL");
setLong(2, objectId);
setInt(3, attrId);
setDate(4, bankDate);
ocstmt.setQueryTimeout(200);
ocstmt.execute();
return DBUtil.ComplexTypeMapping.getValueEntity(oracleConnection, (Struct)ocstmt.getObject(1));
}finally{
releaseAllResources(false);
}
}
public static ValueEntity getValueEntity(OracleConnection connection, Struct struct) throws SQLException, IOException{
if(struct == null) return null;
Object[] attrs = struct.getAttributes();
ValueEntity data = new ValueEntity();
data.setType(bigdecimalAsInteger((BigDecimal)attrs[0]));
data.setNum(bigdecimalAsDouble((BigDecimal)attrs[1]));
data.setStr(attrs[2] != null?String.valueOf(attrs[2]):null);
data.setDate((Date)attrs[3]);
//Clob clobAttr= (Clob)attrs[4];
//long clobLength= clobAttr.length();
//data.setClob( String.valueOf(clobLength));
data.setClob(getClobAsString((Clob)attrs[4]));
data.setNumArr(getDoubleArray((Array)attrs[5]));
data.setStrArr(getStringArray((Array)attrs[6]));
data.setDateArr(getDateArray((Array)attrs[7]));
return data;
}
最后我发现问题与 IBM websphere 有关 version.It 是 10.0.0.3 但现在我们使用的是 10.0.0.9 版本。
我想获取数据类型为CLOB的列的值。在 Java 方面,我正在获取结构的属性,这些属性来自调用 "get_val" 的我们的过程。尽管程序不 return 为空,但 attr[4] 为空。它适用于某些 CLOB 属性,但有时 return 为空 属性。 我确定它是空的,因为当我尝试发送 attr[4] 的长度时。它显示“0”。但是从程序来看它显示了38个符号。
这可能是什么原因?我该如何解决?
public ValueEntity getAttributeValue(String token, Long objectId, Integer attrId, Date bankDate) throws SQLException, IOException{
try{
createContext(token,true);
ocstmt.close();
ocstmt = (OracleCallableStatement) oracleConnection.prepareCall("{ ? = call package.get_val(?,?,?) }");
ocstmt.registerOutParameter(1, OracleTypes.STRUCT, "T_VAL");
setLong(2, objectId);
setInt(3, attrId);
setDate(4, bankDate);
ocstmt.setQueryTimeout(200);
ocstmt.execute();
return DBUtil.ComplexTypeMapping.getValueEntity(oracleConnection, (Struct)ocstmt.getObject(1));
}finally{
releaseAllResources(false);
}
}
public static ValueEntity getValueEntity(OracleConnection connection, Struct struct) throws SQLException, IOException{
if(struct == null) return null;
Object[] attrs = struct.getAttributes();
ValueEntity data = new ValueEntity();
data.setType(bigdecimalAsInteger((BigDecimal)attrs[0]));
data.setNum(bigdecimalAsDouble((BigDecimal)attrs[1]));
data.setStr(attrs[2] != null?String.valueOf(attrs[2]):null);
data.setDate((Date)attrs[3]);
//Clob clobAttr= (Clob)attrs[4];
//long clobLength= clobAttr.length();
//data.setClob( String.valueOf(clobLength));
data.setClob(getClobAsString((Clob)attrs[4]));
data.setNumArr(getDoubleArray((Array)attrs[5]));
data.setStrArr(getStringArray((Array)attrs[6]));
data.setDateArr(getDateArray((Array)attrs[7]));
return data;
}
最后我发现问题与 IBM websphere 有关 version.It 是 10.0.0.3 但现在我们使用的是 10.0.0.9 版本。