【问题标题】:java.sql.SQLException: Column Index out of range, 2 > 1 even though I counted the columnjava.sql.SQLException:列索引超出范围,2 > 1 即使我计算了列
【发布时间】:2019-05-12 22:56:09
【问题描述】:

我从这段代码中得到了标题中提到的错误,我不知道为什么......

public String[] getLobbies() {
    String sql = "SELECT * FROM lobby";
    SQLResponse<ResultSet> response = unclosedOperate(PreparedStatement::executeQuery, sql);
    SQLResponse<ResultSet> countResponse = unclosedOperate(PreparedStatement::executeQuery, "SELECT COUNT(*) AS count FROM lobby");
    if (!response.hasResponse() || !countResponse.hasResponse()) return new String[0];
    try {
        if (countResponse.getResponse().next()) {
            int count = countResponse.getResponse().getInt("count");
            String[] array = new String[count];

            if (response.getResponse().next()) {
                for (int i = 0; i < count; i++) {
                    Logger.debug("count: " + count);
                    Logger.debug("i: " + i);
                    array[i] = response.getResponse().getString(i + 1);
                }
            }

            return array;
        }
        return new String[0];
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        close(response.getResponse());
        close(countResponse.getResponse());
    }
    return new String[0];
}

它正在将它打印到控制台...

[07:14:57 ERROR]: count: 2
[07:14:57 ERROR]: i: 0
[07:14:57 ERROR]: count: 2
[07:14:57 ERROR]: i: 1
[07:14:57 WARN]: java.sql.SQLException: Column Index out of range, 2 > 1.

这不应该发生..? SQL 是一种索引,不是吗?该列中有两个条目,我想检索这两个条目,但是当我检索第二个条目时它会引发该错误,即使当我计算条目时它显示那里有 2... 哦,我的桌子目前看起来像这样...... https://gyazo.com/8af53da8b78b38a63864ae5a1a8f43e6

【问题讨论】:

  • 如果您的表中只有一列,则不能选择getstring(2) - 因此超出范围异常...您需要多次调用response.getResponse().next()...

标签: java mysql sql


【解决方案1】:

您遇到的问题是您没有遍历结果列表,而是尝试从响应中访问结果集中的下一列。由于您的结果集仅返回一列,因此您只能访问 getString(1)(列偏移 1 而不是从 0 开始)。

不是调用getResponse,然后循环,而是为每一行循环调用getResponse,总是调用getString(1)(或者更明确一点,使用实际的列名)。

    if (countResponse.getResponse().next()) {
        int count = countResponse.getResponse().getInt("count");
        String[] array = new String[count];
        Logger.debug("count: " + count);

        for (int i = 0; i < count; i++) {
            if (response.getResponse().next()) {
                Logger.debug("i: " + i);
                array[i] = response.getResponse().getString(1);
            }
        }
        return array;
    }

话虽如此,这可以大大简化。您无需获取 count 即可实例化数组。然后你可以使用while 来循环响应并构建你的数组...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 2020-03-17
  • 1970-01-01
  • 2023-03-25
  • 2015-02-27
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
相关资源
最近更新 更多