Производительность JDBC - передача большого набора результатов из базы данных в Java

1

У меня есть вопрос, связанный с работой. Мне нужно получить около 500 строк из базы данных с целью использования POI Apache для экспорта результатов в электронную таблицу Microsoft Excel.

До сих пор для всех запросов к базе данных я заполнял объект PL/SQL на уровне базы данных, а затем возвращал этот объект PL/SQL в Java и просматривал результаты.

Но теперь, когда мне нужно вернуть такой большой результирующий набор в Java из уровня db, мне задали вопрос, действительно ли я думаю, что может быть лучше работать, чтобы вернуть 500 строк в Java через XML-Clob,

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

благодаря

  • 4
    500 рядов невелики, если только каждый ряд не огромен.
Теги:

2 ответа

3
Лучший ответ

Согласно http://docs.oracle.com/cd/E11882_01/java.112/e16548/resltset.htm#JJDBC28621

По умолчанию, когда Oracle JDBC запускает запрос, он извлекает результирующий набор из 10 строк за раз из курсора базы данных. Это значение размера выборки строки Oracle по умолчанию. Вы можете изменить количество строк, полученных при каждой поездке, на курсор базы данных, изменив значение размера выборки строк.

Следующие методы доступны во всех объектах Statement, PreparedStatement, CallableStatement и ResultSet для настройки и получения размера выборки:

void setFetchSize(int rows) throws SQLException
int getFetchSize() throws SQLException
  • 0
    +1 Это в целом правильный ответ - хотя это правда, что 500 строк невелики.
  • 0
    Еще раз подчеркнув, что 500 строк невелики, я бы предложил установить размер выборки в соответствии с количеством строк, которые вы ожидаете получить, чтобы ограничить количество обращений к базе данных. YMMV, но мой опыт показывает, что оптимальный размер выборки часто находится где-то между 500 и 1000 строк.
Показать ещё 3 комментария
1

Используйте Java ResultSet. Это будет извлекать только несколько строк за раз, сколько вам нужно. Вот пример того, как его использовать: http://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html В принципе, каждый раз, когда вы запрашиваете новую строку, например, в rs.next(), система JDBC решает, доступны ли данные на клиенте или их необходимо получить с сервера. Таким образом, вы не получаете сразу все данные.

  • 0
    @ScaryWombat Может привести к вызову в БД. Что действительно происходит, так это то, что N строк возвращаются за раз, где N находится под вашим контролем с помощью Statement.setFetchSize().
  • 0
    Я перечитал его ответ с некоторым пониманием

Ещё вопросы

Сообщество Overcoder
Наверх
Меню