Oracle SQL查询在Java中报无效列名错误但SQL Developer可正常执行
解决Oracle查询在Java中抛出"Invalid column name"异常的问题
问题根源
你的SQL查询里,把CREATEDDATE转换后的别名定义成了CREATDATE(少了一个字母E):
TO_CHAR (CREATEDDATE,'MM/DD/YYYY HH:MI:SS AM') AS CREATDATE
但Java代码里却用rs.getString("CREATEDDATE")去取这个列,两者拼写不匹配,这就是JDBC抛出"Invalid column name"的直接原因。
你提供的Java代码用了DECODE函数,但STATUS别名和代码调用一致,这部分没问题,问题就出在日期列的别名和代码里的列名不对应上。
解决办法
两种修正方式选一个就行:
方式1:改SQL别名,和Java代码对齐
把SQL里的日期列别名改成CREATEDDATE,和代码里调用的列名匹配,同时排序字段也要对应修改:
SELECT LOGIN_ID AS GROUPID, FILENAME, TO_CHAR (CREATEDDATE,'MM/DD/YYYY HH:MI:SS AM') AS CREATEDDATE, CASE STATUS WHEN 2300 THEN 'File downloaded and deleted' WHEN 2200 THEN 'File Downloaded but not deleted' WHEN 2100 THEN 'File Created' END STATUS,UMI,PAYLOAD FROM CC_CCS_SRD_ADM.TB_MAILBOX_OUTBOUND WHERE LOGIN_ID = 'HCLLIN02' ORDER BY CREATEDDATE DESC
方式2:改Java代码,和SQL别名对齐
把Java里获取日期的代码改成rs.getString("CREATDATE"):
mapToAdd.put("CreateDate", rs.getString("CREATDATE"));
额外提醒
- 写SQL和Java代码时,尽量保持列名/别名的拼写完全一致,避免这类低级错误。
- 如果你用嵌套查询的写法,也要注意别名的拼写匹配,不然还是会出同样的错。
内容的提问来源于stack exchange,提问作者JeyanthiRanjit
相关产品推荐
相关产品推荐

