我试图连接到运行在WebSphere上的Java应用程序内的Oracle数据库。我需要能够创建一个数组描述符用于调用过程。获取oracle.jdbc.driver.LogicalConnection,需要oracle.jdbc.OracleConnection
的代码看起来是这样的:
Connection conn=null;
ArrayDescriptor arrayDescriptor;
Connection tmpCon = jdbcTemplate.getDataSource().getConnection();
conn = WSCallHelper.getNativeConnection(tmpCon);
arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",conn);
IDs = new oracle.sql.ARRAY(arrayDescriptor, conn, list.toArray());
调用ArrayDescriptor.createDescriptor
线罚中一类转换异常
java.lang.ClassCastException: oracle.jdbc.driver.LogicalConnection incompatible with oracle.jdbc.OracleConnection at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:149) at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:115)
通过这个走与调试,我可以看到,conn
绝对是一个oracle.jdbc.driver.LogicalConnection
。问题是在我的代码,我不能实际引用LogicalConnection
因为这个类不是公共的,所以我不能只是做这样的事情:
arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",((LogicalConnection)conn).getWrapper());
。
这:
arrayDescriptor = ArrayDescriptor.createDescriptor("t_my_array",((oracle.jdbc.driver.OracleConnection)conn).getWrapper());
也返回一个类转换异常:
java.lang.ClassCastException: oracle.jdbc.driver.LogicalConnection incompatible with oracle.jdbc.driver.OracleConnection
我需要有一个OracleConnection
对象,但我似乎无法得到一个从获取LogicalConnection
回到我身边。有没有人见过这个?我觉得我在这里错过了一些非常明显的东西,但也许我只是需要另一杯咖啡......
一些谷歌命中暗示不兼容的驱动程序可能会导致这种情况。你的WebSphere设置中是否有早期版本的ojdbc版本,或者在你的类路径中的某处,还是在应用程序中打包了? –
@AlexPoole:有趣的想法。我不认为我有一个不同版本的ojdbc库,但我会看看。除非我开始编写代码手动将数组传递给过程,否则应用程序可以正常工作。 – FrustratedWithFormsDesigner
@AlexPoole:看起来你是对的! – FrustratedWithFormsDesigner