首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >db2jcc4.jar无效参数:未知列名

db2jcc4.jar无效参数:未知列名
EN

Stack Overflow用户
提问于 2013-04-12 22:14:41
回答 1查看 14.4K关注 0票数 5

我以前问过以下问题:DB2查询未知列名ERRORCODE=-4460,SQLSTATE=null

此后,我们了解到从db2jcc4.jar (JCC)到db2jcc.jar (通用)的更改解决了我们开发环境中的问题。问题是那个不起作用的是新的那个。我们不想在没有真正的理由的情况下向后退。但是,我不理解上面链接中的查询在新驱动程序中无效的原因。

我们知道,column...if通过强制一个空空间将其从结果中提取出来,一切都正常工作(除了我们没有得到数据)。该查询在其他环境中运行良好。

我看到了一些帖子,暗示此错误与结果集元数据getColumn()方法有关,该方法在JDBC3和JDBC4之间不一致。但是,我们在这个查询中没有做任何其他查询中没有执行的特殊操作,至少在我们所能知道的范围内是这样的。

有人知道这个查询会引起什么后果吗?这个behavior...either是否有某种设置或解决方法的修复,或者一个新的驱动程序?

完全例外:

com.ibm.db2.jcc.a.SqlException: jcc10300无效参数:未知>列名FILTER_VALUE_DECODE。ERRORCODE=-4460,SQLSTATE=null at com.ibm.db2.jcc.a.dd.a(dd.java:660),com.ibm.db2.jcc.a.dd.a(dd.java:60),com.ibm.db2.jcc.a.dd.a(dd.java:103),com.ibm.db2.jcc.a.ib.a(ib.java:1674),com.ibm.db2.jcc.a.yl.a(yl.java:1625)com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getString(WSJdbcResultSet.java:2467) at org.hibernate.type.StringType.get(StringType.java:41) 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) .ibm.db2.jcc.a.yl.getString(yl.java:1468)在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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-13 07:16:05

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

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

IBM更改此行为以符合DB2 9.5驱动程序中的JDBC规范,请参阅本文件。要恢复到旧的行为,您需要指定连接属性useJDBC4ColumnNameAndLabelSemanticsDB2BaseDataSource.NO (它的值为2):

分辨率 如果不能更改应用程序以符合新的ResultSetMetaData行为,但需要JDBC4.0的其他特性,则将useJDBC4ColumnNameAndLabelSemantics连接或DataSource属性设置为DB2BaseDataSource.NO (2)以保留旧行为。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15981711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档