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

Java从ResultSet填充int[][]数组触发异常,请求技术排查协助

问题分析与修复方案

你的代码执行到循环就跳异常,主要是几个关键逻辑和写法问题导致的,咱们一步步梳理解决:

1. ResultSet遍历逻辑完全错误

你的SQL是按GameID查询单条数据,结果应该只有1行(包含A-H共8列),但你在嵌套循环里重复调用rs1.next():

for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
        rs1.next(); // 第2次调用就会返回false,后续操作直接抛异常
        char c = 'A';
        char column = (char) (i + c);
        Arr[i][j] = rs1.getInt(column);
    }
}

第一次rs1.next()能指向唯一的结果行,但嵌套循环会执行64次rs1.next(),从第2次开始next()返回false,此时再调用rs1.getInt()就会抛出SQLException(ResultSet已无可用行)。

如果你是要把单条数据的8列填充到数组的一行,正确逻辑应该是:

// 先确认有结果行
if (rs1.next()) {
    char baseCol = 'A';
    for (int col = 0; col < 8; col++) {
        char colName = (char) (baseCol + col);
        Arr[0][col] = rs1.getInt(colName); // 填充数组第一行的8列
    }
}

如果你的SQL实际要返回8行数据(每行8列)来填充整个8x8数组,那应该这样写:

int rowIdx = 0;
// 遍历ResultSet的每一行,最多取8行
while (rs1.next() && rowIdx < 8) {
    char baseCol = 'A';
    for (int colIdx = 0; colIdx < 8; colIdx++) {
        char colName = (char) (baseCol + colIdx);
        Arr[rowIdx][colIdx] = rs1.getInt(colName);
    }
    rowIdx++;
}

2. 异常信息输出太简陋

你现在只打印System.out.println(ex);,只能看到异常类名,完全不知道具体错误原因(是ResultSet越界?连接失败?还是列名写错?)。赶紧改成:

catch (Exception ex) {
    ex.printStackTrace(); // 打印完整异常栈,精准定位问题
}

这一步能帮你快速锁定到底是哪出了问题,非常关键。

3. 资源未关闭导致连接泄漏

你的代码没在finally块里关闭Connection、Statement、ResultSet,长期运行会耗尽数据库连接池资源,必须补上:

finally {
    try {
        if (rs1 != null) rs1.close();
        if (st != null) st.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

4. SQL拼接存在安全风险(可选优化)

用字符串拼接GameID会有SQL注入风险,建议改用PreparedStatement:

String query = "select A,B,C,D,E,F,G,H from Games where GameID = ?";
// ...
st = conn.prepareStatement(query);
st.setInt(1, this.res); // 假设res是int类型
rs1 = st.executeQuery();

5. 连接问题排查

如果调整后还是跳异常,要检查getConnection()方法:

  • 数据库URL、用户名、密码是否正确
  • 数据库服务是否正常启动
  • JDBC驱动是否正确加载

把这些问题修复后,你的代码应该就能正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:04:35