Jaybird (Firebird JDBC) Результаты FetchSize - Pagination Laffing ЗапросыJAVA

Программисты JAVA общаются здесь
Anonymous
Jaybird (Firebird JDBC) Результаты FetchSize - Pagination Laffing Запросы

Сообщение Anonymous »

Я пытаюсь найти способ заставить Jaybird сделать «странику» в результате. Предположим, у нас есть несколько длительных запросов SQL (он возвращает, например, 5000 строк за 15 секунд). Тем не менее, получение первых 50 (случайных) строк занимает всего лишь доли секунды. Пока мы не добавляем поговорку «Заказ за запрос», сервер быстро возвращает первые строки, что может быть немедленно показано в клиентском приложении. Это, кстати, поведение по умолчанию клиента Flamerobin. Есть ли способ заставить Jaybird не загружать все ряды в результат? Я полагаю, что метод STMT.SetFetchSize (50) имеет эту цель, но, возможно, это неправильно. Используемая версия Jaybird была 2.2.7, а использованная версия Firebird была 2.5.4. Спасибо за ваши советы. < /P>

String user = "user";
String pass = "pass";
Connection conn = DriverManager.getConnection(s, user, pass);
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
conn.setAutoCommit(false);
Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(50);
stmt.setFetchDirection(ResultSet.FETCH_FORWARD);
ResultSet rs = null;
String sql = "select * from TABLE"; //long lasting select
boolean ok = stmt.execute(sql);
if (ok) {
rs = stmt.getResultSet();
while (rs.next()) {
//do something
}
}
if (rs != null) {
rs.close();
}

if (stmt != null) {
stmt.close();
}
< /code>

Я стараюсь достичь той же мышления, что и клиент Flamerobin - на загрузке данных в таблицу (только когда они нам нужны - прокрутите вниз в таблице). Мы разрабатываем приложение, которое является клиентом двух уровней ERP System (DB Server Firebird, клиент на платформе NetBeans). Мы написали некоторые компоненты базы данных, которые заполняют D -xtable данных по тому же принципу, как «Межбаза Delphi Components». Приведенный выше код составляет, в коде компонента мы загружаем первые 100 строк в модель таблицы JTable, и когда пользователь прокручивается вниз, мы загружаем еще 100 строк и т. Д. Однако я замечаю, что время загрузки первых 100 строк такое же, как если бы мы загружаем все строки в набор данных. Это код < /p>

boolean ok = stmt.execute(sql);
if (ok) {
rs = stmt.getResultSet();
int rows = 0;
while (rs.next() rows < 100) {
//do something
rows++;
}
}
< /code>

занял практическое то же время, что и первый кусок исходного кода. Кажется, что команда STMT.Execute (SQL) ожидает, пока все строки выбранного не будут возвращены с сервера. Однако я установил, что хочу получить 50 кусков строк, поэтому я предполагал, что цикл Whor Grand начнется сразу после получения первых 50 строк с DB -сервера. Поэтому я хочу запустить цикл WHICE после получения первых 50 строк (как будто я устанавливаю STMT.SetMaxRows (50)), но я хочу иметь OportUnity, чтобы позволить результату открыть и принести другие ряды по требованию.

Подробнее здесь: https://stackoverflow.com/questions/355 ... ng-queries

Вернуться в «JAVA»