com.ibm.db2.jcc.b.SqlException:无效参数:未知列名 COL1

Posted

技术标签:

【中文标题】com.ibm.db2.jcc.b.SqlException:无效参数:未知列名 COL1【英文标题】:com.ibm.db2.jcc.b.SqlException: Invalid argument: unknown column name COL1 【发布时间】:2009-11-20 06:28:59 【问题描述】:

我在尝试使用 rs 访问我的结果集时收到此错误 com.ibm.db2.jcc.b.SqlException: Invalid argument: unknown column name COL1。 getString("COL1"). 我的 SQL 查询是:从 table1 中选择 UPPER(COL1)。 相同的查询和 Java 代码在 DB2 v8(Type 2 驱动程序) 上运行良好,但在使用 DB2 v9(Type 4 驱动程序)时会引发上述异常。

但是我可以通过添加别名来解决此错误, 修改后的查询:Select UPPER(COL1) COL1 from table1.

上述查询同时适用于 DB2 v8 和 v9。 这是否意味着,在 DB2 9 中,我们必须在与 (upper,trim,..) 之类的函数一起使用时提供别名???

谢谢

【问题讨论】:

【参考方案1】:

在 DB2 或 SQL 中,没有任何东西要求函数的列名是特定值。

可能是早期的驱动程序(甚至是 t2 驱动程序,我通常不会再使用,我自己更喜欢 t4)给你一个你期望的列名,但我想知道它会给你什么 col1 | '.' | col2

你的查询真的应该是你必须让它工作:

select upper(col1) as col1 from table1

这保证了列名是col1

如果您真的想知道查询的列名是什么,您可以使用以下调用检索结果集的元数据(仅示例):

ResultSet rs = <get your result set here>;
ResultSetMeatData meta = rs.getMetaData();
for (int i = 1; i < meta.getColumnCount(); i++) 
    System.out.println (getColumnName (i));

但您应该使用as 子句来确保名称符合预期。

【讨论】:

以上是关于com.ibm.db2.jcc.b.SqlException:无效参数:未知列名 COL1的主要内容,如果未能解决你的问题,请参考以下文章