Получение записей из MySQL в Java - PullRequest
1 голос
/ 29 октября 2008

Я создаю приложение на 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 (row); (с помощью которого я бы как создать двумерный ArrayList). В противном случае я получаю пустые результаты.

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

1 Ответ

2 голосов
/ 29 октября 2008

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

С другой стороны, добавляя строку, вы добавляете один и тот же объект в результат, поэтому при каждом вызове 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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...