Результаты, полученные - страдающие страдания длительных запросовJAVA

Программисты JAVA общаются здесь
Anonymous
Результаты, полученные - страдающие страдания длительных запросов

Сообщение 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 (DB Server Firebird, клиент на платформе NetBeans). Мы написали некоторые компоненты базы данных, которые заполняют Jxtable данных по тому же принципу, как и компоненты «Interbase/Delphi» в прошлом. 
Код выше упрощен; В коде компонента мы загружаем первые 100 строк в модель JTable Table, и когда пользователь прокручивается вниз, мы загружаем еще 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 кусков ряда, поэтому я предположил, что цикл while начнется сразу после получения первых 50 строк с сервера DB. Поэтому я хочу запустить цикл WHILE после получения первых 50 строк (как будто я установил STMT.SetMaxRows (50) ), но я хочу иметь возможность сохранить набор результатов и приносить больше строк по требованию.

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

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