当前位置: 首页 > 面试题库 >

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

支才
2023-03-14
问题内容

从那以后,我们了解到,从db2jcc.jar(UNIVERSAL)的db2jcc4.jar(JCC)进行更改可以解决我们开发环境中的问题。问题是不起作用的是较新的一个。如果没有充分的理由,我们不想向后退。但是我不理解以上链接中的查询在新驱动程序中无效的原因。

我们知道那是列…如果我们通过强制使用空格将其从结果中删除,则一切正常(除非我们不获取数据)。该查询在其他环境中运行良好。

我看到一些帖子暗示该错误与JDBC3和JDBC4之间的结果集元数据getColumn()方法不一致有关。但是我们没有在此查询中做任何其他许多查询中没有做过的特殊事情,至少在我们所知的范围内。

有谁知道这个查询可能会引起什么事情?是否有针对此行为的修复程序……某些设置或解决方法,或新的驱动程序?

完整的例外:

com.ibm.db2.jcc.a.SqlException:[jcc] [10150] [10300]
[4.3.111]无效的参数:未知>列名FILTER_VALUE_DECODE。错误代码= -4460,SQLSTATE =
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
com.ibm.db2.jcc.a.yl.getString(yl.java:1468)的com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getString(WSJdbcResultSet的.a.yl.a(yl.java:1625)
.java:2467),位于org.hibernate.type.StringType.get(StringType.java:41),位于org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184),位于org.hibernate.type.NullableType.nullSafeGet(位于org.hibernate.loader.custom.CustomLoader
$ ScalarResultColumnProcessor.extract(CustomLoader.java:501)处的NULL。


问题答案:

您可能正在使用Hibernate3.x。Hibernate3.x尝试按列的值columnName(即列ResultSetMetaData的原始名称的属性)来检索列的值,而JDBC要求(根据规范)要求按列的值columnLabelAS别名的属性来检索),或者如果不是这样的话,t指定原始列名)。

较旧的JDBC版本尚不清楚columnName和之间的区别columnLabel,因此实现Drivers会为两个属性返回相同的值,或者希望columnName可以检索到值。

IBM更改了此行为,使其符合DB2
9.5驱动程序中的JDBC规范,请参阅本文档。要恢复到旧的行为,您需要将connection属性指定useJDBC4ColumnNameAndLabelSemanticsDB2BaseDataSource.NO(具有值2):

解决方法
如果无法更改应用程序以符合新ResultSetMetaData行为,但是需要JDBC
4.0的其他功能,请将useJDBC4ColumnNameAndLabelSemanticsConnection或DataSource属性设置为DB2BaseDataSource.NO(2)以保留旧行为。

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



 类似资料:
  • 问题内容: 更新 列出值时,我犯了一个小错误。我应该输入“:username”而不是“:alias”。我想这个问题的答案是谁想要的自由统治?还是删除问题? 原版的 我一直在使用Yii的活动记录模式。现在,我的项目需要为一个小事务访问另一个数据库。我以为Yii的DAO会很好。但是,我收到了一个神秘的错误。 CDbCommand无法执行SQL语句:SQLSTATE [HY093]:无效的参数编号:参数

  • 问题内容: 我正在使用排序规则调用来自MySQL数据库的数据。问题是某些行包含我无法清除的怪异数据。例如,符号,所以一旦到达,它就会失败。 我已经尝试过和,即使这样做,但它会不断通过并造成严重破坏。 在Mac上运行PHP 5.3.10。因此,问题是-如何清除无效的utf8符号,保留其余数据,以便可行? 更新。这是一种重现它的方法: 问题答案: 好像符号是,但由于数据由不应公开的姓氏组成,因此只显示

  • 问题内容: 上面的代码因以下错误而失败 SQLSTATE [HY093]:参数号无效:参数未定义 虽然什么时候才执行? 这里发生了什么? 问题答案: 您收到的此错误: SQLSTATE [HY093]:参数号无效:参数未定义 是因为&中的元素数不相同或包含1个以上的元素。 如果包含多个元素,则插入操作将失败,因为query()中仅引用了1个列名 如果&不包含相同数量的元素,则由于查询期望x参数,但

  • 我正试图在Apache 2.2.15-30(CentOs 6.5)上设置Kerberos身份验证,并且面临一个无法调试或解决的问题。我可以在KDC日志中看到TGS请求,Firefox发送了正确的授权:协商头,但Apache中出现了问题,我得到了HTTP 500。 有人知道问题出在哪里吗?如果有任何评论,我将不胜感激。 谢谢你马丁

  • 我已经和这个打了几天了。。。 刚连接到数据库- 叫来- 但我只是 PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:无效参数编号:未定义参数” 在执行行上。 如果它是相关的,表是这样定义的: 我对PDO还比较陌生,尤其是BLOB,所以我可能在做一些很明显很愚蠢的事情,但它现在正在逃避我! 谢谢 编辑:我注意到prepare中对引号:comment的引用

  • 问题内容: 背景:我正在编写一个简单的UDP应用程序对我管理的beta服务器执行ping操作,以便告诉我它仍然可以正常运行(我无法对那些想知道的服务器启用ping操作)。我打算在手机上运行此命令,以在服务器不再响应时警告我。 我试图像这样使用看似简单的java.net.DatagramSocket: 我还要说一句,我已通过android清单启用了Internet权限,如果删除了use子句,则会出现