Вопрос

Я создаю приложение на Java для извлечения данных из базы данных MySQL.После выполнения запроса я получаю результирующий набор и делаю следующее для извлечения записей:

while (rs.next())
        {
            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }
            result.add(row.toString());
            row.clear();
        }

где рс = Результирующий набор и рм = Результирующий набор метаданных

Проблема в том, что я должен сделать result.add(строка.toString()); скорее, чем просто результат.добавить(строку); (с помощью которого я хотел бы создать двумерный ArrayList).В противном случае я получаю пустые результаты.

Я пробовал ставить строка.очистить(); в самом начале, до того, как для цикл, но это приводит к тому, что все мои результаты заполняются несколькими экземплярами последней записи.Точно так же , как ряд не был добавлен в Результат до самого конца, когда он сравняется с последним рекордом.Нужно ли мне "фиксировать" ArrayList ряд прежде чем добавлять его как элемент в другой ArrayList?Если да, то каким образом?Кроме того, из любопытства, почему .toString() работать по-другому?

Это было полезно?

Решение

Добавляя row.toString(), вы создаете новый объект String для добавления в result.

С другой стороны, добавляя row , вы добавляете один и тот же объект в result, поэтому при каждом вызове row.clear() он очищает все строки в result.

Что вам следует сделать, так это создать новый объект row перед циклом for и не выполнять row.clear().Ниже приведен пример.

while (rs.next())
        {
            row = new ArrayList();

            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }

            result.add(row);
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top