Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Базы данных (JDBC, JPA, Hibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 17:29   #1
JAD!
Форумчанин
 
Регистрация: 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 {платите ваши деньги;}
JAD! вне форума Ответить с цитированием
Старый 26.10.2010, 08:04   #2
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
На локальной машине вся таблица грузится секунд 10-15 секунд
Зачем грузить сразу всю таблицу? по мимо самих данных передается еще служебная информация, которой не так уж и мало.

а какой драйвер используете?
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.

Последний раз редактировалось alexinspir; 27.10.2010 в 04:16. Причина: орф. ошибки
alexinspir вне форума Ответить с цитированием
Старый 28.10.2010, 03:09   #3
JAD!
Форумчанин
 
Регистрация: 15.05.2009
Сообщений: 118
По умолчанию

Мне нужна сразу вся таблица! Я конечно могу юзать фильтры и формировать запросы, но этот гемор пока будующем, и если бы реально вся переданная информация данной табл. занимала хотя-бы 1мб, то проблем бы было меньше..
Чувствую придется свой сервер клепать... ух.. и XMLем поток шуровать...

Цитата:
а какой драйвер используете?
Стандартно:
Код:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			connection = DriverManager
					.getConnection("jdbc:odbc:Driver={SQL Server};Server="
							+ this.server + ";UID=" + this.user + ";PWD="
							+ this.password + ";Database=Database;");
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;}
JAD! вне форума Ответить с цитированием
Старый 28.10.2010, 05:34   #4
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

ResultSet позволяет не грузить сразу все данные, а только лишь те строки которые нужны.
таким образом можно даже с 64 метрами свободной оперативной памяти просмотреть целиком много-гигабайтную таблицу.

http://download.oracle.com/javase/6/...0int,%20int%29
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 28.10.2010, 13:56   #5
JAD!
Форумчанин
 
Регистрация: 15.05.2009
Сообщений: 118
По умолчанию

А можно ли с ResultSet`a узнать о количестве загружаемых строк? Есть какая-то функция, кроме перебором while (rs.next()) i++;? Или желательно пред этим отправлять (Select count(*) from ...) . На форумах нормального ответа не нашёл, только эти 2 способа..
И нету ли примера использования prepareStatement?
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;}
JAD! вне форума Ответить с цитированием
Старый 28.10.2010, 19:11   #6
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от JAD! Посмотреть сообщение
А можно ли с ResultSet`a узнать о количестве загружаемых строк?
Код:
resultSet.last();
int rowCount = resultSet.getRow();
Цитата:
Сообщение от JAD! Посмотреть сообщение
И нету ли примера использования prepareStatement?
http://homepages.gac.edu/~wolfe/270/...cadesPrep.html
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 28.10.2010, 20:38   #7
JAD!
Форумчанин
 
Регистрация: 15.05.2009
Сообщений: 118
По умолчанию

ыыыы))) +100500)) Большое спасибо))) А в чём прикол? Теперь оно 170кб грузит, и это происходит в секунду..
Для чего тогда обыкновенный Statement?
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;}
JAD! вне форума Ответить с цитированием
Старый 29.10.2010, 03:29   #8
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от JAD! Посмотреть сообщение
Теперь оно 170кб грузит, и это происходит в секунду...
Я ваш код не видел и сказать причины не могу. в принципе, при одинаковом их использовании, различий в поведении резалсета быть не должно.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 29.10.2010, 12:03   #9
JAD!
Форумчанин
 
Регистрация: 15.05.2009
Сообщений: 118
По умолчанию

Ну серьезно, поменял только 1-2 строчку(и) стейтмент и всё сразу стало ок))) Но кажется динамичность ушла.. То есть раньше прогресс бар работал и строки по-одно динамически могли добавляться, а теперь пока не прийдут все 170кб таблица не отобразится. Ну это можно разделить и организовать...
If (что-то чинить)
{(надо знать его конструкцию, что-то в этом понимать)->чинить;} else {платите ваши деньги;}
JAD! вне форума Ответить с цитированием
Старый 29.10.2010, 14:05   #10
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Оберните ResultSet в TableModel и грузится будут только те данные которые сейчас отображаются.
задержка лишь будет на этапе создания resultset'а.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.

Последний раз редактировалось alexinspir; 29.10.2010 в 14:07.
alexinspir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нет таких файлов в 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