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

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

16.01.2013, 15:09. Показов 8579. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru