有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您可能正在使用Hibernate 3。x、 冬眠3。x试图通过columnName(即列的原始名称的ResultSetMetaData属性)检索列的值,而JDBC(根据规范)要求通过columnLabel(别名的AS属性,或者如果未指定原始列名)检索列的值

    旧版本的JDBC不完全清楚columnNamecolumnLabel之间的区别,因此实现驱动程序要么为这两个属性返回相同的值,要么期望columnName检索值

    IBM改变了这种行为,以符合DB29.5驱动程序中的JDBC规范,请参见this document。要恢复到旧的行为,需要指定连接属性useJDBC4ColumnNameAndLabelSemanticsDB2BaseDataSource.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来检索值