Индекс столбца Jdbc вне диапазона

#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);
}