Советы по JDBC ResultSet
У меня есть таблица Employee и класс Entity для него,
Моя задача такова, что мне нужны данные таблицы сотрудников в наборе результатов (типа с прокруткой) два раза,
в таком случае, что было бы лучше из следующего для использования данных во второй раз ->
1: создать экземпляр класса сущности и сохранить его в List, в то время как в первый раз выполняется итерация набора результатов.
ИЛИ ЖЕ
2: после первой итерации вызовите метод first() набора результатов, чтобы вернуться к первой строке и использовать данные во второй раз.
Какой вариант потребует меньше времени и ресурсов.
Если у вас есть лучшие предложения, пожалуйста, предоставьте.
Благодарю.
3 ответа
Если это не очень большие наборы результатов, вам, вероятно, будет гораздо лучше потреблять весь JDBC ResultSet
в память и работает на java.util.List
а не на java.sql.ResultSet
поэтому:
- Список более удобен для разработчиков
- Ресурс базы данных может быть немедленно освобожден (что менее подвержено ошибкам)
- Возможно, вам не хватит памяти в Java на 1000 строк.
- Вы можете сделать много ошибок при работе с прокруткой
ResultSet
, поскольку различные драйверы JDBC реализуют эту функциональность лишь слегка по-разному
Вы можете использовать инструменты для использования наборов результатов JDBC. Например, Apache DbUtils:
QueryRunner run = new QueryRunner(dataSource);
ResultSetHandler<List<Person>> h
= new BeanListHandler<Person>(Person.class);
List<Person> persons = run.query("SELECT * FROM Person", h);
JOOQ (синтаксис 3.0):
List<Person> list =
DSL.using(connection, sqldialect)
.fetch("SELECT * FROM Person");
.into(Person.class);
JdbcTemplate template = // ...
List result = template.query("SELECT * FROM Person", rowMapper);
Кэшируйте данные, которые вы извлекаете из базы данных. Это всегда лучше, чем опросить его, даже если драйвер обеспечивает кэширование на своем собственном уровне. Вы всегда можете снять его, если он больше не нужен.
Может быть, используя Map
сотрудников по их первичному ключу поможет?
Если бы Вы описали, почему Вы думаете, что Вам нужно повторить список более одного раза, чем мы увидим, если есть лучший алгоритм, чтобы избавиться от этого второго взаимодействия в первую очередь.