Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/46: Рейтинг темы: голосов - 46, средняя оценка - 4.74
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462

Количество строк в resultSet

16.01.2013, 15:09. Показов 8543. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определяю количество строк в ResultSet таким образом.
Java
1
2
3
4
5
6
7
ResultSet rs = preparedStatement.executeQuery();
if (rs != null) {
    rs.last();
    int rsSize = rs.getRow();
    rs.beforeFirst();
    //...
}
зависит ли время работы этих строк от размера сета???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2013, 15:09
Ответы с готовыми решениями:

Как определить число строк в ResultSet?
Есть ли какой-нить метод для определения числа строк в ResultSet?

Подсчитать количество пучтых строк и количество строк,которые начинаются и оканчиваются на одну и ту же букву.
Дан текстовый файл.Подсчитать количество пучтых строк и количество строк,которые начинаются и оканчиваются на одну и ту же...

Поменять местами две средних строки, если количество строк четное, и первую со средней строкой, если количество строк нечетное
поменять местами двесредних строки, если количество строк четное, и первую со средней строкой, если количество строк нечетное

20
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
16.01.2013, 16:24
Ну, начнем с того, что некоторые драйвера просто не дадут такое сделать - сначала last, потом beforeFirst.

Ну а если позволят - fetch происходит только при обращении к данным, подготовленной выборки нет, так что при вызове last будет fetch на всю выборку. По крайней мере так утверждает наш ораклоид.
1
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
16.01.2013, 18:04  [ТС]
Т.е. не стоит так делать?
А есть еще варианты как заранее посчитать количество записей??

Добавлено через 58 секунд
Какой механизм у Hibernate при выполнении запросов на HQL? Как он считает строки??
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
16.01.2013, 19:50
А Hibernate считает строки?
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
16.01.2013, 20:13  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
А Hibernate считает строки?
Вот тоже интересно...
Зная размер массива можно заранее память выделить и не тратить время и память на ресайз ArrayList...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.01.2013, 12:14
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
Зная размер массива можно заранее память выделить и не тратить время и память на ресайз ArrayList...
Я Вам один умный вещь скажу, но Вы не обижайтесь. © Время на получение данных из БД на порядки превышает время, затраченное при этом на resize ArrayList-а.
1
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
17.01.2013, 12:53  [ТС]
Ясное дело...но все равно на 5000 элементах будет заметно)))
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.01.2013, 15:36
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
Ясное дело...но все равно на 5000 элементах будет заметно)))
Что заметно? Время расширения ArrayList???

Java
1
2
3
4
5
6
7
8
List<Integer> list = new ArrayList<>();
long start = System.currentTimeMillis();
for (int i=0; i<5000; i++){
    list.add(i);
}
long end = System.currentTimeMillis();
System.out.println("Size="+list.size());
System.out.println("Time="+(end-start)+"ms");
Этот код выполняется за 1-2 миллисекунды. Стабильно. Вы уверены, что на фоне выборки из базы 5000 строк и их преобразования в объекты Вы реально увидите 1-2 миллисекунды разницы? Вы уверены, что вообще в состоянии заметить эту разницу?

P.S. Как Вы думаете - а сколько раз расширяется ArrayList при добавлении в него 5000 элементов?
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.01.2013, 15:37
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
Ясное дело...но все равно на 5000 элементах будет заметно)))
добавьте пару нулей и тогда будет почти верно )
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
17.01.2013, 16:12
Цитата Сообщение от mutagen Посмотреть сообщение
добавьте пару нулей и тогда будет почти верно )
Ну, при плюс паре нулей получается 18-20мс. На порядок разница в накладных расходах при возрастании на два порядка объема полезных данных (и, следовательно, времени их выборки). Таким образом, получаем снижение (!) относительных накладных расходов на порядок.

И все равно - ну не верю я, что кто-то способен увидеть разницу в 20 мс.

Добавлено через 29 минут
Ну вот, на простейших выборках. ID (number(10,0)) и название (varchar2(50)).

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package ru.skipy.tests;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
 
/**
 * ArrayListSpeedTest
 *
 * @author Eugene Matyushkin sks Skipy
 * @since 17.01.13
 */
public class ArrayListSpeedTest {
 
    public static void main(String[] args) throws Exception{
        List<Integer> list = new ArrayList<>();
        long start = System.currentTimeMillis();
        for (int i=0; i<6824; i++){
            list.add(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("Size="+list.size());
        System.out.println("Time="+(end-start)+"ms");
 
        list = new ArrayList<>();
        start = System.currentTimeMillis();
        for (int i=0; i<168699; i++){
            list.add(i);
        }
        end = System.currentTimeMillis();
        System.out.println("Size="+list.size());
        System.out.println("Time="+(end-start)+"ms");
 
        oracle.jdbc.driver.OracleDriver.class.newInstance();
        Connection c = DriverManager.getConnection("jdbc:oracle:thin:@//host:1521/sid", "user", "password");
        PreparedStatement st = c.prepareStatement("select classified, label from account");
        ResultSet rs = st.executeQuery();
        List<Item> acct = new ArrayList<>();
        start = System.currentTimeMillis();
        while(rs.next()){
            acct.add(new Item(rs.getLong("classified"), rs.getString("label")));
        }
        end = System.currentTimeMillis();
        System.out.println("Items: "+acct.size());
        System.out.println("Time: "+(end-start)+"ms");
        rs.close();
        st.close();
 
        st = c.prepareStatement("select classified, label from doctree");
        rs = st.executeQuery();
        List<Item> docs = new ArrayList<>();
        start = System.currentTimeMillis();
        while(rs.next()){
            docs.add(new Item(rs.getLong("classified"), rs.getString("label")));
        }
        end = System.currentTimeMillis();
        System.out.println("Items: "+docs.size());
        System.out.println("Time: "+(end-start)+"ms");
        rs.close();
        st.close();
        c.close();
    }
 
    static class Item{
 
        private long classified;
        private String label;
 
        public Item(long classified, String label){
            this.classified = classified;
            this.label = label;
        }
 
    }
}
И результаты:

Code
1
2
3
4
5
6
7
8
Size=6824
Time=3ms
Size=168699
Time=13ms
Items: 6824
Time: 317ms
Items: 168699
Time: 4082ms
Т.е. разница на "маленькой" выборке в 106 раз, на "большой" - в 314 раз. Что и ожидалось.
1
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
17.01.2013, 16:19  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
P.S. Как Вы думаете - а сколько раз расширяется ArrayList при добавлении в него 5000 элементов?
Ага, 9.
Ну ладно. Будем считать, что тратится не так много...
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.01.2013, 16:41
Цитата Сообщение от Skipy Посмотреть сообщение
Ну, при плюс паре нулей получается 18-20мс. На порядок разница в накладных расходах при возрастании на два порядка объема полезных данных (и, следовательно, времени их выборки). Таким образом, получаем снижение (!) относительных накладных расходов на порядок.
при этом возрастает риск ООМ (если к примеру этих вызовов одновременно много), а не время реакции
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
17.01.2013, 16:47  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
И все равно - ну не верю я, что кто-то способен увидеть разницу в 20 мс.
тысяча клиентов...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
18.01.2013, 11:21
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
тысяча клиентов...
Клиенты и не такое способны увидеть. Что совсем не означает, что эффект присутствует. У клиентов паранойя.

P.S. Порог восприятия человеческого глаза - 40мс. Дальше картинки уже не различаются. Расскажите, каким органом чувств клиент определит задержку в 20мс?
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
18.01.2013, 15:33  [ТС]
Имею ввиду, что эти 40мс на тысяче клиентов могут накопиться и стать секундами, если сервер не будет держать...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
18.01.2013, 17:15
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
Имею ввиду, что эти 40мс на тысяче клиентов могут накопиться и стать секундами, если сервер не будет держать...
Если сервер не будет держать - очередные запросы просто встанут в очередь обработки. Но довести сервер до состояния, чтобы скорость копирования процессором (!) данных в памяти (!!) упала в 50 раз (чтобы 20 мс доросло до секунды) Вам вряд ли удастся.

Вы еще один момент упускаете. Если по вине просадки производительности будут расти издержки - будут расти и полезные затраты. Или же Вы полагаете, что сервер будет всё так же вытаскивать из базы данные за 5 секунд, а накладные расходы увеличатся на секунду? Данные надо прочитать из буфера сетевого адаптера, создать в куче строки, которые потом будут прочитаны через getString, т.е. тут тоже необходимо скопировать в памяти данные. А я Вам скажу, что строки займут сильно больше, чем массив ссылок на объекты. И на их создании просадка производительности будет сказываться сильнее. Т.е. на этом фоне накладные расходы, пусть даже и видимые в абсолютном значении, в относительном опять-таки потеряются.
2
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
18.01.2013, 20:19  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
в очередь обработки
вот про эти мс я и говорю...

ну ок...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.01.2013, 11:55
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
вот про эти мс я и говорю...
ЭТО - уже не миллисекунды. Это секунды (десятки секунд) и потенциальный отказ в обслуживании. Но при этом вставшие в очередь запросы не имеют никакого отношения к тому, что мы начинали обсуждать - накладным расходам на копирование внутреннего массива ArrayList при расширении.
1
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
21.01.2013, 12:18  [ТС]
Да, я не очень в предмете разбираюсь...
В общем время на ресайз ArrayList не приведет к росту очереди?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.01.2013, 12:56
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
В общем время на ресайз ArrayList не приведет к росту очереди?
Нет. Оно находится за пределами погрешности измерений. Гораздо больший эффект может дать неправильное использование потоков, блокировок и т.п.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2013, 12:56
Помогаю со студенческими работами здесь

Массив из строк. 1) Подсчитать количество одинаковых строк. 2) Реверс строк
Необходимо 1) Определить число одинаковых слов. 2) Сформировать второй массив, в котором порядок букв в словах изменен на...

Найти количество строк, в которых количество отрицательных элементов больше, чем количество положительных.
Двумерные массивы. Задание 1. В каждом варианте дан двумерный массив A из N строк и М столбцов.Если в задаче над элементами массива...

Найти количество строк, в которых количество отрицательных элементов больше, чем количество положительных
Найти количество строк, в которых количество отрицательных элементов больше, чем количество положительных.

Создать матрицу количество строк которой равно количеству строк файла
Здравствуйте. Хочу из файла считать данные построчно. Считаю количество строк и создаю двумерный массив ifstream fin; ...

Сравнить количество строк содержащих букву k и строк состоящие из четырех букв
Дано текстовый файл разбит на строки. Сравнить количество строк содержащих букву k и строк состоящие из четырех букв.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru