我关注了this问题,并成功地将Collection发送到Oracle数据库。
不幸的是,在将Struct数组中的所有String值从Object打包到Struct时,这些值都为空。
Object[] reportArray = new Object[3];
Struct[] struct = new Struct[reports.size()];
int arrayIndex = 0;
for (Report data : reports) {
reportArray[0] = data.getXXX(); //data return String here and it become empty on createStruct
reportArray[1] = data.getYYY();
reportArray[2] = data.getZZZ();
struct[arrayIndex++] = connection.createStruct("R_REPORT_OBJECT", reportArray);
}
Array reportsArray = ((OracleConnection) connection).createOracleArray("T_REPORT_TABLE", struct);
callableStatement.setArray("T_REPORT_IN", reportsArray);
callableStatement.executeUpdate();
因此,如果数据获取器(getXXX或getYYY或ZZZ)返回数字,则可以。
但是,如果getter返回String,那么它将作为null发送到数据库。我检查了datumArray并且data []个字节为空。我可以看到该值未正确通过createStruct。
我在驱动程序7-12.1.0.2和8-12.2.0.1上进行了测试
db是Oracle 11c或12c
答案 0 :(得分:0)
通过添加orai18n依赖关系解决
<dependency>
<groupId>com.oracle</groupId>
<artifactId>orai18n</artifactId>
<version>${oracle.jdbc.version}</version>
</dependency>