我之前问过以下问题:DB2 query Unknown column name ERRORCODE=-4460, SQLSTATE=null我们已经了解到,从db2jcc.jar(JCC)更改db2jcc.jar(UNIVERSAL)可以解决我们开发环境中的问题.问题是那些不起作用的是新的.我们不...
我之前问过以下问题:
DB2 query Unknown column name ERRORCODE=-4460, SQLSTATE=null
我们已经了解到,从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 newResultSetMetaDatabehavior but you need other features of JDBC 4.0, set theuseJDBC4ColumnNameAndLabelSemanticsConnection or DataSource property toDB2BaseDataSource.NO(2) to keep the old behavior.
另一种选择是升级到更新版本的Hibernate(4.x),因为这(至少在默认情况下)使用columnLabel来检索值.
本文标题为:java – db2jcc4.jar无效参数:未知列名
基础教程推荐
- 使用javaMail实现发送邮件 2023-04-11
- Java详解AVL树的应用 2023-02-27
- Java设置httponly cookie的实现示例 2023-03-30
- SpringBoot浅析缓存机制之Ehcache 2.x应用 2023-04-12
- 梳理总结Java static关键字的方法作用 2023-01-03
- java – 当JSON对象作为字符串文字插入时,MySQL JSON列丢失小数精度 2023-10-29
- Spring Boot 优雅整合多数据源 2022-11-11
- SpringMVC执行步骤、Model的使用详解 2023-08-08
- Java实现插入公式到PPT的示例代码 2023-02-27
- 基于Java开发实现ATM系统 2023-04-11
