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)等),这些列在当前查询结果里根本不存在,自然会报错。
解决办法
根据你的实际需求二选一:
- 如果需要完整的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";
- 如果只需要部分字段:调整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
相关产品推荐
相关产品推荐

