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

com.ibm.db2.jcc.b.SqlException:无效参数:未知列名COL1,exception,db2,invalid-argument,Exception,Db2,Invalid Argument,尝试使用rs.getString(“COL1”)访问我的结果集时,我遇到了以下错误:com.ibm.db2.jcc.b.SqlException:无效参数:未知列名称COL1。 我的SQL查询是:从表1中选择上限(COL1)。 同样的查询和Java代码在DB2V8(Type2驱动程序)上运行良好,但在DB2V9(Type4驱动程序)上运行时会引发上述异常。 但是,我可以通过添加别名来解决此错误, 修改的查询:从表1中选择上(列1)列1。 上面的查询同时适用于DB2V8和v9。 这是否意味着,在D

尝试使用rs.getString(“COL1”)访问我的结果集时,我遇到了以下错误:com.ibm.db2.jcc.b.SqlException:无效参数:未知列名称COL1
我的SQL查询是:从表1中选择上限(COL1)。 同样的查询和Java代码在DB2V8(Type2驱动程序)上运行良好,但在DB2V9(Type4驱动程序)上运行时会引发上述异常。

但是,我可以通过添加别名来解决此错误, 修改的查询:从表1中选择上(列1)列1。

上面的查询同时适用于DB2V8和v9。 这是否意味着,在DB29中,当与(upper,trim,…)等函数一起使用时,必须提供别名


谢谢

DB2或SQL中的任何内容都不要求函数的列名是特定的值

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

您的查询实际上应该是使其正常工作所必须的:

select upper(col1) as col1 from table1
这保证了列名为
col1

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

ResultSet-rs=;
ResultSetMeatData meta=rs.getMetaData();
for(int i=1;i
但是您应该使用
as
子句来确保名称符合预期

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