javadb2jcc4。jar无效参数:未知列名
我以前问过以下问题: DB2 query Unknown column name ERRORCODE=-4460, SQLSTATE=null
我们从db2jcc4了解到了这一点。来自db2jcc的jar(JCC)。jar(UNIVERSAL)解决了我们开发环境中的问题。问题是不起作用的是新的。我们不想在没有真正好的理由的情况下让我们的司机后退。但是我不明白为什么上面链接中的查询在新驱动程序中无效
我们知道是那个专栏。。。如果我们通过强制一个空的空间将其从结果中去掉,那么一切都会正常工作(除了我们没有得到数据)。该查询在其他环境中运行良好
我看到一些帖子暗示这个错误与JDBC3和JDBC4之间的结果集元数据getColumn()方法不一致有关。但我们在这个查询中并没有做任何其他查询中没有做的特殊事情,至少就我们所知是这样
有人知道这个查询可能会引发什么吗?是否有此行为的修复程序。。。要么是一些设置或解决方法,要么是一个新的驱动程序
完全例外:
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
# 1 楼答案
您可能正在使用Hibernate 3。x、 冬眠3。x试图通过
columnName
(即列的原始名称的ResultSetMetaData
属性)检索列的值,而JDBC(根据规范)要求通过columnLabel
(别名的AS
属性,或者如果未指定原始列名)检索列的值旧版本的JDBC不完全清楚
columnName
和columnLabel
之间的区别,因此实现驱动程序要么为这两个属性返回相同的值,要么期望columnName
检索值IBM改变了这种行为,以符合DB29.5驱动程序中的JDBC规范,请参见this document。要恢复到旧的行为,需要指定连接属性
useJDBC4ColumnNameAndLabelSemantics
到DB2BaseDataSource.NO
(其值为2
):另一个选项是升级到更新版本的Hibernate(4.x),因为它(至少在默认情况下)使用
columnLabel
来检索值