Получение записей из MySQL в Java

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

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

где RS = ResultSet и rm = ResultSetMetaData

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
4 619
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Что вам следует сделать, так это создать новый объект строки перед циклом 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);
        }

Итак, в основном result.add (row) работает как «передача по ссылке», не копируя объект, а просто предоставляя ссылку на него? Спасибо, что решила мою проблему :)

Maciej Gryka 29.10.2008 02:41

Другие вопросы по теме