Какой тип структуры данных должен Я использую для хранения строк таблицы?

Я новичок в Java и только начинаю делать запросы к базам данных. Пока что у меня есть результаты в виде ResultSetMetaData . Я думаю, что для каждой строки в наборе данных я должен добавить ее в какую-то форму коллекции? Кто-нибудь может сказать мне, как лучше всего это сделать?

Спасибо,
Джонси

9
задан informatik01 3 August 2013 в 21:55
поделиться

6 ответов

Обычно у нас есть класс с полями, которые соответствуют таблице. Затем, когда у нас есть (полная) строка в наборе результатов, мы создаем экземпляр этого класса.

Пример:

Рассмотрим таблицу, созданную следующим образом:

CREATE TABLE customer (First_Name char(50), Last_Name char(50),
   Address char(50), City char(50), Country char(25), Birth_Date date);

Класс модели будет таким:

public class Customer {
  private String firstName;
  private String lastName;
  private String address;
  private String city;
  private String country;
  private Date date;


  public String getFirstName() {
    return firstName;
  }
  // getters for all fields

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  // setters for all fields

  public String toString() {
    return String.format("[%s, %s, %s, %s, %s, %s]", firstName,
             lastName, address, city, country, date);
  }
}

Теперь, если вы читаете данные и имеете ResultSet, вы должны создать новый объект клиента и установить поля :

List<Customer> customers = new ArrayList<Customer>();
ResultSet rs = stmt.executeQuery("SELECT * from CUSTOMER;");
while (rs.next()) {
  Customer customer = new Customer();
  customer.setFirstName(rs.get("First_Name"));
  // ... and so on

  customers.add(customer);
}
7
ответ дан 4 December 2019 в 08:49
поделиться

Список кажется вполне логичным. Если у вас не будет дубликатов и вас не беспокоит порядок результатов, возможно, установите Set .

Соответствующая реализация List :

  • ArrayList : это поддерживается массивом, поэтому поиск по определенным индексам должен быть быстрым.

Соответствующие реализации Set :

  • HashSet : Поддерживается HashMap , поэтому O (1) время вставки
  • TreeSet : Учитывает порядок данных (с использованием compareTo метод) - так что итерация данных будет в порядке - компромисс O (log n) время вставки
6
ответ дан 4 December 2019 в 08:49
поделиться

Создайте объект для хранения данных. Прокрутите набор результатов, создав объект для каждого из них, и сохраните их в ArrayList или HashMap, в зависимости от того, как вы хотите использовать данные. Это позволяет вам закрыть базу данных и дает вам хорошие объекты, на которых вы можете создавать методы для управления данными.

Это также позволяет вам писать код, использующий объект, который не должен полагаться на базу данных. Если вы когда-нибудь захотите вытащить базу данных позже и переключиться на текстовые файлы или что-то еще, это легко сделать, и вы все равно можете использовать те же объекты и методы.

8
ответ дан 4 December 2019 в 08:49
поделиться

Вы можете создать класс, который представляет сущности реального мира. Позже, если вы захотите выбрать технологию / инструмент ORM, например hibernate, вы можете использовать те же классы.

1
ответ дан 4 December 2019 в 08:49
поделиться

Во-первых, класс ResultSetMetaData содержит «информацию о типах и свойствах столбцов в объект ResultSet ". Таким образом, результаты вашего запроса находятся в ResultSet, а не в объекте ResultSetMetaData.

Вы можете увидеть Получение значений из наборов результатов Руководство по Java для получения информации о том, как извлекать данные из набора результатов. Вы должны иметь возможность просто пройти через ResultSet, как показано, и поместить свои записи в список или карту, в зависимости от того, как вы хотите получить доступ к данным позже.

1
ответ дан 4 December 2019 в 08:49
поделиться

Я обычно следую той же схеме, которую описывает Andreas_D.

Объект, используемый для хранения каждой строки данных (в данном случае класс Customer), называется объектом передачи данных (TO).

Код, который получает соединение с базой данных, запрашивает базу данных, заполняет TO и возвращает их (обычно в виде списка), называется объектом доступа к данным (DAO).

Подробнее об этом шаблоне проектирования можно прочитать здесь

1
ответ дан 4 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

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