Извлечение записей из MySQL в Java
Вопрос
Я создаю приложение на 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);
}