You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用RowMapper映射查询结果时出现无效列名错误

解决RowMapper映射时“无效列名”的问题

核心原因

你的SQL外层查询中,对TEMP.SUMCARD、TEMP.SUMERRORTXN、TEMP.SUMERRORTXNCARD进行聚合后未指定别名,导致ResultSet返回的列名并非RowMapper中使用的SUMCARD、SUMERRORTXN、SUMERRORTXNCARD,而是类似SUM(TEMP.SUMCARD)的表达式或数据库自动生成的列名(如COLUMN_2),因此触发“无效列名”错误。

修改后的SQL

为外层SELECT的聚合列添加别名,与内层查询的别名保持一致:

SELECT 
    TEMP.SUMALLTXN, 
    SUM(TEMP.SUMCARD) AS SUMCARD, 
    SUM(TEMP.SUMERRORTXN) AS SUMERRORTXN, 
    SUM(TEMP.SUMERRORTXNCARD) AS SUMERRORTXNCARD
FROM
(SELECT
SUM(COUNT(*)) OVER() AS SUMALLTXN,

COUNT(mdmtxn.BIN) OVER (PARTITION BY mdmtxn.BIN) AS SUMCARD,

SUM(case when mdmtxn.MDSTATUS NOT IN ('1','9', '60') then 1 else 0 end) AS SUMERRORTXN,

SUM(case when mdmtxn.MDSTATUS NOT IN ('1','9', '60') then 1 else 0 end) OVER (PARTITION BY mdmtxn.BIN) AS SUMERRORTXNCARD

FROM MDM59.MDMTRANSACTION2 mdmtxn WHERE
    mdmtxn.CREATEDDATE < TO_CHAR(SYSDATE - INTERVAL ':initialMinuteParameterValue' MINUTE ,'YYYYMMDD HH24:MI:SS') AND
    mdmtxn.CREATEDDATE > TO_CHAR(SYSDATE - INTERVAL ':intervalMinuteParameterValue' MINUTE ,'YYYYMMDD HH24:MI:SS')
GROUP BY mdmtxn.MDSTATUS, mdmtxn.BIN
) TEMP
GROUP BY TEMP.SUMALLTXN

额外排查建议

  1. 验证参数替换逻辑:检查setTotalTransactionsSql方法中的字符串替换是否生成了合法SQL(比如替换后的INTERVAL值为纯数字,无多余引号)。
  2. 查看实际列名:可在RowMapper中临时打印ResultSet元数据,确认返回的列名细节:
ResultSetMetaData metaData = rs.getMetaData();
for (int i = 1; i <= metaData.getColumnCount(); i++) {
    System.out.println("实际列名:" + metaData.getColumnName(i));
}

内容的提问来源于stack exchange,提问作者xprop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:05:38