gpt4 book ai didi

java - db2jcc4.jar 无效参数 : Unknown column name

转载 作者:搜寻专家 更新时间:2023-10-31 19:56:19 28 4
gpt4 key购买 nike

我之前问过以下问题: DB2 query Unknown column name ERRORCODE=-4460, SQLSTATE=null

从那以后,我们了解到从 db2jcc4.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 并不完全清楚 columnNamecolumnLabel 之间的区别,因此实现 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 - db2jcc4.jar 无效参数 : Unknown column name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981711/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com