java jdbc 无效的列名_java – db2jcc4.jar无效参数:未知列名

我们已经了解到,从db2jcc.jar(JCC)更改db2jcc.jar(UNIVERSAL)可以解决我们开发环境中的问题.问题是那些不起作用的是新的.我们不想在没有正当理由的情况下倒退我们的司机.但是我不理解上述链接中的查询在新驱动程序中无效的原因.

我们知道它就是那个专栏…如果我们通过强制一个空的空间把它从结果中取出来,一切都可行(除了我们没有得到数据).该查询在其他环境中工作正常.

我看到一些帖子暗示这个错误与结果集元数据getColumn()方法在JDBC3和JDBC4之间不一致有关.但是我们在这个查询中并没有做任何特殊的事情,而在其他许多查询中都没有这样做,至少在我们所知的情况下并没有这么做.

有谁知道这个查询可能是什么设置?是否有针对此行为的修复程序…某些设置或解决方法,还是新驱动程序?

完整的例外情况:

com.ibm.db2.jcc.a.SqlException: [jcc][10150][10300][4.3.111] Invalid parameter: Unknown >column name FILTER_VALUE_DECODE. ERRORCODE=-4460, SQLSTATE=null

at com.ibm.db2.jcc.a.dd.a(dd.java:660)

at com.ibm.db2.jcc.a.dd.a(dd.java:60)

at com.ibm.db2.jcc.a.dd.a(dd.java:103)

at com.ibm.db2.jcc.a.ib.a(ib.java:1674)

at com.ibm.db2.jcc.a.yl.a(yl.java:1625)

at com.ibm.db2.jcc.a.yl.getString(yl.java:1468)

at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getString(WSJdbcResultSet.java:2467)

at org.hibernate.type.StringType.get(StringType.java:41)

at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)

at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:210)

at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:501)

at org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:447)

at org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:344)

at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:647)

at org.hibernate.loader.Loader.doQuery(Loader.java:745)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)

at org.hibernate.loader.Loader.doList(Loader.java:2294)

… 64 more

解决方法:

你可能正在使用Hibernate 3.x. Hibernate 3.x尝试通过其columnName(即列的原始名称的ResultSetMetaData属性)检索列的值,而JDBC要求(通过规范)它们由columnLabel(AS别名的属性)检索,或者如果没有指定原始列名).

较早版本的JDBC并不完全清楚columnName和columnLabel之间的区别,因此实现Drivers要么为两个属性返回相同的值,要么期望columnName检索值.

IBM将此行为更改为符合DB2 9.5驱动程序中的JDBC规范,请参阅this document.要恢复旧行为,需要将连接属性useJDBC4ColumnNameAndLabelSemantics指定为DB2BaseDataSource.NO(其值为2):

Resolution

If you cannot change your applications to conform to the new ResultSetMetaData behavior but you need other features of JDBC 4.0, set the useJDBC4ColumnNameAndLabelSemantics Connection or DataSource property to DB2BaseDataSource.NO (2) to keep the old behavior.

另一种选择是升级到更新版本的Hibernate(4.x),因为这(至少在默认情况下)使用columnLabel来检索值.

标签:java,hibernate,jdbc,db2

来源: https://codeday.me/bug/20190620/1244510.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值