Как установить тип курсора в JDBC? - PullRequest
1 голос
/ 03 декабря 2008

Я использую Tomcat и у меня есть несколько страниц JSP, которые отображают подмножество таблицы. Я показываю 20 строк одновременно на одной странице. Когда таблица содержит большие объемы данных, страница jsp не отображается. Я предполагаю, что ResultSet использует курсор на стороне клиента. В прошлом я работал с ASP, и мы всегда использовали серверные передние курсоры, и никогда не было проблем с большими объемами данных. Наша база данных - оракул 10 г.

Как я могу указать серверный курсор вперед только в JDBC?

Ответы [ 3 ]

3 голосов
/ 03 декабря 2008

Драйвер oracle реализует серверные курсоры через свойство FetchSize.

К сожалению, JDBC явно не позволяет устанавливать клиентские и серверные курсоры, поэтому разные драйверы реализуют его по-разному. Вот другие ссылки, которые помогли:

Размер выборки
курсоры
Драйвер Oracle

2 голосов
/ 03 декабря 2008
Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY);
ResultSet rs = stmt.executeQuery(sql);

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

Вы всегда можете попробовать установить его заново на уровне ResultSet.

rs.setFetchDirection(ResultSet.TYPE_FORWARD_ONLY);

Надеюсь, это поможет.

0 голосов
/ 03 декабря 2008

Не совсем отвечает на вопрос, но рассматривали ли вы явное добавление подкачки в запрос SELECT с помощью ROWNUM или ROWNUMBER в предложении WHERE?

например: для второй страницы данных, размер страницы 20 элементов:

SELECT * 
  FROM MyDataObjects
  WHERE rownum > 20 AND rownum < 41

Это обеспечит возврат не более одной страницы записей, устраняя проблему с большим курсором.

...