Преобразуйте набор результатов Java в Массив строк

Целочисленное математическое решение, что предоставленный Ian хорош, но страдает от ошибки целочисленного переполнения. Принятие переменных является всем int, решение могло быть переписано, чтобы использовать long математика и избежать ошибки:

int pageCount = (-1L + records + recordsPerPage) / recordsPerPage;

, Если records long, ошибка остается. Решение для модуля не имеет ошибки.

9
задан Sergey Glotov 28 December 2011 в 16:10
поделиться

3 ответа

   String[] arrLocations = locations.toArray(new String[0]);

Это правильный ответ. Причина вашего исключения заключается в том, что все объекты на самом деле не являются строками.

Вам необходимо изменить это:

   Object value = rs.getObject(i);

на это:

   String value = rs.getString(i);

или это:

   String value = rs.getObject(i).toString();

Последнему потребуется проверка нуля, если вы может возвращать пустые столбцы.

Обратите внимание, что представление toString () может быть не совсем тем, что вы ищете во всех случаях, но оно поможет вам начать.

Изменить: если вы заполняете поле со списком, вам понадобится один столбец в строке, не так ли? Если нет, вам нужно каким-то образом представить всю строку как строку. Затем вы вставляете это значение и помещаете значение непосредственно в окончательный список массивов, поэтому ваш цикл должен выглядеть следующим образом:

    ArrayList<String> al = new ArrayList<String>();
    while (rs.next()) {
            ArrayList<String> record = new ArrayList<String>();
            for (int i = 1; i <= columns; i++) {
                    String value = rs.String(i);
                    record.add(value);
            }
            String value = methodWhichConvertsArrayListToStringTheWayYouNeedItFormatted(record);
            al.add(value);
    }        
    return al;
5
ответ дан 4 December 2019 в 15:21
поделиться

Почему бы не использовать rs.getString (). Однако я не буду рекомендовать это делать. Но это решило бы вашу проблему. Я имею в виду просто иметь дело со String с самого начала. Пример,

// Not a good idea to pass a active resultset as a parameter. 
// Use disconnected implementation instead, for example rowset.
public ArrayList<ArrayList<Object>> results2Array(ResultSet rs)
            throws SQLException {
    ResultSetMetaData metaData = rs.getMetaData();
    int columns = metaData.getColumnCount();

    ArrayList<String[]> list = new ArrayList<String[]>();

    while (rs.next()) {
            String[] record = new String[columns];

            for (int i = 1; i <= columns; i++) {
                    // Not a good idea to get everything as a string. This way you will
                    // get a default string representation of objects. Suppose, you 
                    // want to format dates and doubles as per some requirement.
                    record[i-1] = rs.getString(i);
            }
            list.add(record);
    }
    return list;
}

Теперь вам нужно получить его, как показано ниже.

String[][] arrLocations = locations.toArray(new String[locations.size()][0]);

Еще лучше проверить тип и получить соответствующие значения, используя имеющиеся у вас метаданные. Это поможет вам отформатировать данные, а именно даты и числа с двойной точностью.

5
ответ дан 4 December 2019 в 15:21
поделиться

String [] arrLocations = locations.toArray (new String [0]);

Приведенный выше код преобразует список строк в массив строк. Теперь в вашем случае вы создаете список объектов, поэтому вы не можете напрямую преобразовать его в массив String. Как правило, у вас есть 2 варианта:

  1. Первоначально определите свой список как список строк, а при заполнении списка преобразуйте ваши значения в строки (эфир, выполнив Object # toString или извлекая / генерируя значение String) и сохраните его в своем списке, например в вашем коде сделайте это String value = rs.getObject (i) .toString ();
  2. Если вы не сделаете этого на шаге 1, вам придется выделить массив String, просмотреть список, преобразовать текущее значение в String и вставляем в массив. Я бы выбрал вариант 1.

В качестве примечания - методы в Java должны начинаться со строчной буквы

3
ответ дан 4 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: