SQL Server 异常:使用 JDBC 时出现“列名 xxx 无效”

2022-09-04 02:19:26

我从SQL Server JDBC驱动程序收到一个奇怪的错误。它告诉我,列名是无效的,即使列存在,正确命名,并且在SqlServer Management Studio中执行相同的查询时工作正常。

错误是:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The column name MarginCall is not valid.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(SQLServerResultSet.java:626)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getBigDecimal(SQLServerResultSet.java:2570)
    at org.apache.commons.dbcp.DelegatingResultSet.getBigDecimal(DelegatingResultSet.java:305)
...

答案 1

问题解决了。这是我的一个简单的错误。

我的查询在 select 语句中使用了 'AS' 子句。我试图使用实际的列名而不是AS子句中定义的列别名从ResultSet中检索列值。

小学生错误。为浪费时间道歉。

非常感谢 Steve B. 建议使用 ResultSet.getColumnNames()。虽然我使用的实际方法调用是ResultSet.getMetaData().getColumnName(columnIndex);


答案 2

检查表名的大小写。如果在 ms sql 服务器上将排序规则设置为区分大小写,则表名也会受到影响。


推荐