CreateArray因不支持的功能而失败:ule子中的createArrayof

问题描述

dbCreateArray函数在将Oracle DB与c3p0连接池一起使用时出现错误错误java.sql.sqlException:不支持功能我正在使用以下方法

#[dbCreateArray(oracle_Configurtion,<USER_DEFINED_DATA_TYPE_NAME_AS_IN_ORACLE>,Object[])]

我正在使用Mule EE 3.9,oracle 12.2.0和c3p0 0.9.5.2

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
<property name="driverClass" value = "oracle.jdbc.pool.OracleDataSource" /> 
<property name="jdbcUrl" value = "${db.url}" /> 
<property name="user" value = "${db.username}" /> 
<property name="password" value = "${db.password}" /> 
<property name="initialPoolSize" value = "${pool.initialSize}" /> 
</bean> 

我看过这个博客,他建议改用oracle ucp池,但是在使用c3p0池时有什么方法可以解决此问题。

https://help.mulesoft.com/s/article/dbCreateArray-function-failing-with-DB-connection-pooling

解决方法

Oracle does not support the JDBC4-standard createArrayOf method

相反,您必须call a proprietary createARRAY method

如果您直接编写代码,则将c3p0 unwrap Connection传递给基础Oracle Connection并调用专有方法没问题。但是,您似乎正在使用一种高级语言,该语言可能已翻译为标准JDBC方法。除非您完全了解转换的完成方式,否则要使此更高级别的语言调用起作用可能并不容易。

看起来Oracle自己的UCP内置了Oracle特定的解决方法,但是c3p0不包括这样的解决方法,可惜。