gpt4 book ai didi

java - MySQL:超出范围,但该列不是最后一个?

转载 作者:可可西里 更新时间:2023-11-01 08:05:54 25 4
gpt4 key购买 nike

在花了很长时间弄清楚我的代码有什么问题之后,我决定继续寻求帮助。截至目前,这是导致错误的代码:

try {
ResultSet rs = statement.executeQuery("SELECT `message` FROM `notifications` WHERE `active`='1'");
List<String> messages = new ArrayList<String>();
int index = 1;
if (rs.next()) {
while (!rs.isLast()) {
messages.add(rs.getString(index));
index ++;
}
if (rs.isLast()) {
messages.add(rs.getString(index));
}
}
return messages.toArray(new String[messages.size()]);
} catch (Exception localException) {
if (localException instanceof NullPointerException) {
/* ignore for now */
localException.printStackTrace();
} else {
localException.printStackTrace();
}
}

错误告诉我该列超出范围,但当我查看我的数据库时却没有。

java.sql.SQLException: Column Index out of range, 2 > 1.

有什么建议吗?提前致谢!

最佳答案

里面

 if (rs.isLast()) {
messages.add(rs.getString(index));
}

在此语句中,索引将为 2,但您的结果集仅包含一列。

当您说 rs.getString(2) 时,它将获取与第二列关联的值。

应该是:

ResultSet rs = statement.executeQuery("SELECT `message` FROM `notifications` WHERE `active`='1'");
List<String> messages = new ArrayList<String>();
int index = 1;
while (rs.next()) {
messages.add(rs.getString(index));
}

注意:最佳做法是根据列名而不是索引获取值。我相信您认为 getString(index) 访问了该行,然后通过列名调用它会为您清除它。

ResultSet rs = statement.executeQuery("SELECT `message` FROM `notifications` WHERE `active`='1'");
List<String> messages = new ArrayList<String>();
String column = "message";
while (rs.next()) {
messages.add(rs.getString(column));
}

关于java - MySQL:超出范围,但该列不是最后一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22260380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com