|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.10.2010, 17:29 | #1 |
Форумчанин
Регистрация: 15.05.2009
Сообщений: 118
|
И снова JDBC
Есть база под MSSQL с n количеством таблиц. У главной таблицы 700 кортежей (записей). Таблица в 30 полей большинство varchar()`ы. Запрос селекта выполняется моментально.
Соответственно есть java-проект, работающий с этой базой. На локальной машине вся таблица грузится секунд 10-15 секунд; удалённо по сети полторы минуты, грузит 9 Мб, через инет - минут 5. Если взять всю таблицу скопировать и вставить в эксель, например, то сохранённый файл будет весить порятка 200-300 кб, потому что много полей пустых. Из моих расчётов (если varchar(1)-1byte, int-4byte, smalldatatime (грубо) -16byte, bit -1 byte), то полных 700 записей должны занимать порядка 600Кб. Вопрос1: Какого фига грузит 9МБ?! Вопрос2: Почему так долго? (хотя наверно потому что 9Мб)))) Вопрос3: (Главный) Как решить эту проблему?! Вариант решения 1). (мой): Делать сервер-клиентскую систему, связь не через JDBC а через ручками написанную прогу. Понятно, прога-клиент отправляет проге-серверу запрос, та работает с сервером получает данные, сжимает их нужным образом и отправляет на сервер. Минусы: 1.впадло 2.Нафига тогда JDBC?! Короче мне это не нравится. 2). Должна быть возможно система архивации передачи данных?! 3). Какой-то другой джававский драйвер..
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;} |
26.10.2010, 08:04 | #2 | |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
Цитата:
а какой драйвер используете?
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. Последний раз редактировалось alexinspir; 27.10.2010 в 04:16. Причина: орф. ошибки |
|
28.10.2010, 03:09 | #3 | |
Форумчанин
Регистрация: 15.05.2009
Сообщений: 118
|
Мне нужна сразу вся таблица! Я конечно могу юзать фильтры и формировать запросы, но этот гемор пока будующем, и если бы реально вся переданная информация данной табл. занимала хотя-бы 1мб, то проблем бы было меньше..
Чувствую придется свой сервер клепать... ух.. и XMLем поток шуровать... Цитата:
Код:
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;} |
|
28.10.2010, 05:34 | #4 |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
ResultSet позволяет не грузить сразу все данные, а только лишь те строки которые нужны.
таким образом можно даже с 64 метрами свободной оперативной памяти просмотреть целиком много-гигабайтную таблицу. http://download.oracle.com/javase/6/...0int,%20int%29
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. |
28.10.2010, 13:56 | #5 |
Форумчанин
Регистрация: 15.05.2009
Сообщений: 118
|
А можно ли с ResultSet`a узнать о количестве загружаемых строк? Есть какая-то функция, кроме перебором while (rs.next()) i++;? Или желательно пред этим отправлять (Select count(*) from ...) . На форумах нормального ответа не нашёл, только эти 2 способа..
И нету ли примера использования prepareStatement?
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;} |
28.10.2010, 19:11 | #6 |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
Код:
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. |
28.10.2010, 20:38 | #7 |
Форумчанин
Регистрация: 15.05.2009
Сообщений: 118
|
ыыыы))) +100500)) Большое спасибо))) А в чём прикол? Теперь оно 170кб грузит, и это происходит в секунду..
Для чего тогда обыкновенный Statement?
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;} |
29.10.2010, 03:29 | #8 |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
Я ваш код не видел и сказать причины не могу. в принципе, при одинаковом их использовании, различий в поведении резалсета быть не должно.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. |
29.10.2010, 12:03 | #9 |
Форумчанин
Регистрация: 15.05.2009
Сообщений: 118
|
Ну серьезно, поменял только 1-2 строчку(и) стейтмент и всё сразу стало ок))) Но кажется динамичность ушла.. То есть раньше прогресс бар работал и строки по-одно динамически могли добавляться, а теперь пока не прийдут все 170кб таблица не отобразится. Ну это можно разделить и организовать...
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;} |
29.10.2010, 14:05 | #10 |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
Оберните ResultSet в TableModel и грузится будут только те данные которые сейчас отображаются.
задержка лишь будет на этапе создания resultset'а.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. Последний раз редактировалось alexinspir; 29.10.2010 в 14:07. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нет таких файлов в JDBC! | Umbrella90 | Java Базы данных (JDBC, JPA, Hibernate) | 3 | 07.07.2010 23:05 |
и снова Paint.... | TopoRRR | Помощь студентам | 2 | 21.12.2009 14:23 |
MDIChild снова и снова... | Siber_Dec | Общие вопросы Delphi | 2 | 13.12.2009 03:24 |
JDBC + PostgreSQL - непонятная ошибка. | pinansonoyon | Java Базы данных (JDBC, JPA, Hibernate) | 1 | 30.08.2009 23:50 |