В Java лучше поддерживать данные в ResultSet или преобразовывать в массив? - PullRequest
1 голос
/ 17 мая 2011

У меня есть два класса, сервер и несколько клиентов.Класс сервера делает запрос к базе данных и извлекает определенное количество строк.Клиенты запрашивают часть этих строк, каждая отдельную часть.

В классе сервера лучше поддерживать результат запроса в ResultSet и преобразовывать его в массив объектов, когда класс клиента создаетзапрос или преобразование всего в массив объектов и частичная его отправка при возникновении запроса?

Мне кажется, что поддерживать в ResultSet проще и контролировать.

Ответы [ 3 ]

5 голосов
/ 17 мая 2011

Самая большая причина не оставлять его в ResultSet - это то, что он не освобождает соединение обратно в пул (если я не ошибаюсь). Таким образом, вы в конечном итоге держитесь за ресурсы, которые должны быть освобождены для других операций.

2 голосов
/ 17 мая 2011

На самом деле я не уверен, понял ли я ваш подход.В типичных сценариях клиент / сервер с уровнями персистентности клиент (1) вызывает удаленный метод, этот (2) запускает операцию базы данных, а служба (3) отвечает запрошенными объектами.

В вашем сценариипохоже, что сервер читает данные из базы данных, кэширует их и ждет, пока клиенты запросят куски.

Если я правильно понял, и сервер кэширует объекты базы данных, то он должен преобразовать данные из результирующего набора.в объектах я бы предпочел коллекцию или карту для хранения «строк».Набор результатов является довольно хрупкой структурой данных - как некоторые наборы результатов не поддерживают повторное чтение записей набора (= вы не можете повторять дважды).Я всегда брал данные из набора и закрывал их как можно скорее.

0 голосов
/ 17 мая 2011

Если вы намереваетесь передать содержимое результирующего набора другим классам или методам, тогда определенно лучше вынуть данные из результирующего набора и сохранить их в некоторой форме структуры данных (массив / список и т. Д.). Если вы этого не сделаете, вы начнете добавлять зависимости из пакета java.sql в классы, которые действительно не должны участвовать в доступе к базе данных. Это также значительно усложняет модульное тестирование этих классов / методов.

Если ResultSet используется только в очень ограниченном объеме (т. Е. В одном методе), то нет никакой реальной выгоды в его выгрузке в другую структуру данных.

...