java.sql.SQLException列索引越界(2>1)问题排查求助
问题根源分析与解决方案
这个Column Index out of range, 2 > 1错误的直接原因非常明确——你的SQL查询只返回了1列数据,但你在代码里尝试获取第2列的值。
1. 核心错误点:ResultSet取值超出查询结果范围
看你的SQL语句:
String req = "Select A.CodeA from album A, collabo C where A.CodeA = C.CodeA order by 1 ";
这条语句只查询了A.CodeA这一列,所以返回的ResultSet里只有索引为1的列(JDBC中列索引从1开始)。但你在遍历ResultSet时,却调用了:
new Appareil(resu.getString(1), new Album (resu.getString(2)))
这里的resu.getString(2)试图获取第2列,而结果集中根本没有这一列,直接触发了SQLException。
2. 如何修复?
你需要根据Appareil构造函数的需求,调整SQL语句,确保查询返回足够的列。比如,如果Album需要的是A.CodeA之外的另一字段(比如专辑名称A.AlbumName),你需要把它加到SELECT子句中:
// 示例:假设Album需要A.CodeA和A.AlbumName两列 String req = "Select A.CodeA, A.AlbumName from album A, collabo C where A.CodeA = C.CodeA order by 1 ";
如果Album其实只需要A.CodeA来初始化,那你可以直接复用第一列的值:
myList.add(new Appareil(resu.getString(1), new Album(resu.getString(1))));
3. 关于TableModel的疑问
你的TableModelAppareils代码本身没有问题,它只设置了"Identification"一列,并且从Appareil的getAppAlb().getCodeA()获取值。但前提是myList中的Appareil对象能被正确初始化——而现在的问题是你根本没机会完成这一步,因为ResultSet取值的错误已经提前抛出异常了。所以先解决SQL和ResultSet的问题,TableModel的功能自然就能正常运行。
内容的提问来源于stack exchange,提问作者juliee
相关产品推荐
相关产品推荐

