connection.createStruct使字符串为空

时间:2019-03-25 14:34:32

标签: java oracle

我关注了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

1 个答案:

答案 0 :(得分:0)

通过添加orai18n依赖关系解决

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>orai18n</artifactId>
  <version>${oracle.jdbc.version}</version>
</dependency>