java MySQL:超出范围,但该列不是最后一列?
在花了很长时间找出我的代码出了什么问题后,我决定继续寻求帮助。到目前为止,这是导致错误的代码:
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.
有什么建议吗?提前谢谢
# 1 楼答案
^{} 方法只确定您是否在最后一行,而不是最后一列。使用
index
的方法是迭代同一行上的所有列确定列数的方法是从} method 和} method 从中获取列数。然后你可以用它来循环浏览你的专栏
ResultSet
中获取ResultSetMetaData
对象,并使用ResultSet
上的^{ResultSetMetaData
上的^{# 2 楼答案
里面
在这个语句中,索引将是2,但结果集只包含一列
当你说
rs.getString(2)
时,它将获取与第二列相关的值应该是:
注意:最佳做法是基于列名而不是索引获取值。我相信您认为getString(index)访问了该行,通过列名调用它会为您澄清这一点
# 3 楼答案
在查询中,SELECT子句中只有一列
message
。从java代码中删除index++
以消除异常,因为rs.getString(index)
正在尝试获取查询结果中不存在的列号2的值