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

java.sql.SQLException:列索引越界7>6问题排查求助

问题分析与解决方案

这个java.sql.SQLException: Column Index out of range, 7 > 6.错误其实已经把问题说得很直白了:你尝试读取ResultSet的第7列,但当前执行的SQL查询只返回了6列数据,直接触发了索引越界异常。

问题出在你的**重载方法selectCollabos(int idCat, int idEtat)**里:

  • 不管是哪个条件分支,你写的SQL都只查询了6个字段:IdentApp, A.IdentI, DenomCat, A.IdentM, NomM, CodeA
  • 但在循环处理结果时,你却沿用了第一个selectCollabos()方法的逻辑,试图读取第7到12列的数据(比如resu.getString(7)、resu.getDate(8),以及Album相关的resu.getString(9)等),这些列在当前查询结果里根本不存在,自然会报错。

解决办法

根据你的实际需求二选一:

  1. 如果需要完整的Collabo对象:修改重载方法里所有分支的SQL语句,补充查询足够的字段,参考第一个selectCollabos()的写法,关联所有需要的表并查询对应的字段。比如修改idCat != 0分支的SQL:
req = "SELECT IdentApp, A.IdentI, DenomCat, A.IdentM, NomM, PrenomM, SexeM, NaissM, A.CodeA, TitreA, DateArrivee, Nom " +
      "FROM collabo A, musicien E, instrument C, album D " +
      "WHERE A.IdentI = C.IdentI AND A.IdentM = E.IdentM AND A.CodeA = D.CodeA " +
      "AND A.IdentI = " + idCat + " ORDER BY 1";
  1. 如果只需要部分字段:调整Collabo对象的创建逻辑,只使用当前查询返回的6列数据,不要访问超出范围的列索引。比如:
myList.add(new Collabo(resu.getInt(1), 
                       new Instrument(resu.getInt(2), resu.getString(3)), 
                       new Musicien(resu.getInt(4), resu.getString(5), null, null, null), 
                       new Album(resu.getString(6), null, null, null)));

另外额外提醒一句:直接拼接参数到SQL里存在SQL注入风险,建议改用PreparedStatement来处理参数,既安全又规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:57:29