#java #mysql #jdbc
#java #mysql #jdbc
Вопрос:
Кто-нибудь может сказать мне, почему getColumnClassName сообщает мне, что индекс столбца был вне диапазона, когда вызов rs.getString в предыдущей строке работает нормально, и я начинаю итерацию с 1?
int i = 1;
while (rs.next()) {
columns.put("id", Integer.toString(i));
columns.put("name", rs.getString(4));
columns.put("type", rs.getMetaData().getColumnClassName(i));
columns.put("nullable", Integer.toString(rs.getMetaData().isNullable(i)));
i ;
s.add(columns);
}
return s;
Ответ №1:
Ваша i
переменная должна сбрасываться на 1
значение каждый раз через цикл while. Текущая логика будет getColumnClassName(2)
во второй записи и getColumnClassName(3)
в третьей записи и т.д. Если у вас больше записей, чем выбранных столбцов, вы получите сообщение об ошибке «индекс вне диапазона».
Неясно, хотите ли вы получить данные из записи или просто метаданные о возвращаемых столбцах.
Если вы действительно хотите выполнить итерацию по всем столбцам, чтобы получить информацию о типе, вам нужно получить количество столбцов и использовать это.
final int cnt = rs.getMetaData().getColumnCount();
for (int i=0; i<cnt; i)
{
columns.put("id", Integer.toString(i));
columns.put("name", rs.getMetaData().getColumnName());
columns.put("type", rs.getMetaData().getColumnClassName(i));
columns.put("nullable", Integer.toString(rs.getMetaData().isNullable(i)));
s.add(columns);
}