Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Долгий запрос, или в чем все-таки дело / 17 сообщений из 17, страница 1 из 1
10.05.2012, 23:50:52
    #37788588
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
Есть дерево, при нажатии на узел дерева выполняется запрос и справа в таблице отображаются данные из базы данных. Так вот, не могу понять что происходит, в одном из узлов находится 430 строчек, которые необходимо отобразить в табличке, цифра в принципе не большая, в конце концов это же не 4 тысячи, но! проблема в том, что с момента нажатия узла и момента отображения данных в таблице, проходит чуть ли не секунд 20, это ооооочень долго для таких объемов. Приведу код как я вставляю данные в таблицу:
Код: 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.
   DefaultMutableTreeNode select=(DefaultMutableTreeNode)jXTree2.getSelectionPath().getLastPathComponent();


         fr=(Grouptovar)select.getUserObject();

         bindingGroup2 = new org.jdesktop.beansbinding.BindingGroup();

         System.out.println("1");

                   
         tovarQuery =ConnectorDB.FrTreePUEntityManager.createQuery("SELECT c FROM Tovar c WHERE c.pathGroup LIKE ?1");
          System.out.println("2");
         tovarQuery.setParameter(1, fr.getPath()+"%");
         
          System.out.println("3");
   
         
  tovarList =org.jdesktop.observablecollections.ObservableCollections.observableList(new java.util.LinkedList(tovarQuery.getResultList()));
         
         
          System.out.println("4"); 
         
org.jdesktop.swingbinding.JTableBinding jTableBinding2 = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, tovarList, jXTable3);
          
          
 System.out.println("5");

        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding2 = jTableBinding2.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${id}"));
        columnBinding2.setColumnName("#");
        columnBinding2.setColumnClass(Integer.class);
        columnBinding2.setEditable(false);
        


        columnBinding2 = jTableBinding2.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${nameTovar}"));
        columnBinding2.setColumnName("Название товара");
        columnBinding2.setColumnClass(String.class);
        columnBinding2.setEditable(false);


        columnBinding2 = jTableBinding2.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${cost}"));
        columnBinding2.setColumnName("Цена");
        columnBinding2.setColumnClass(String.class);
        columnBinding2.setEditable(false);
  bindingGroup2.addBinding(jTableBinding2);
         System.out.println("6");
        jTableBinding2.bind();
        
        bindingGroup2.bind();
         
                 System.out.println("7");


Поставила везде System.out.println(""); для проверки где же все-таки затыкается это все, но ничего подобного, в консоль очень быстро выводит все System.out.println(""); от 1 до 7, а данные только спустя время. Что я делаю не так, или вообще что происходит? Подскажите пожалуйста. Спасибо
...
Рейтинг: 0 / 0
11.05.2012, 14:36:01
    #37789465
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
Помогите советом, очень нужно
...
Рейтинг: 0 / 0
11.05.2012, 14:48:47
    #37789494
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
С базой данных хорошо бы работать через SwingWorker. Но это на будущее.
Биндинги каждый раз пере-создаются?
Не пора ли познакомиться с профайлером? Так как он уже давно входит в стандартую поставку JDK, то стоит, наверное, узнать как им пользоваться?
...
Рейтинг: 0 / 0
11.05.2012, 15:02:16
    #37789530
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
BlazkowiczС базой данных хорошо бы работать через SwingWorker. Но это на будущее.
Биндинги каждый раз пере-создаются?
Не пора ли познакомиться с профайлером? Так как он уже давно входит в стандартую поставку JDK, то стоит, наверное, узнать как им пользоваться?
да, каждый раз при нажатии на узел дерева, вызывается тот кусок кода, который я выслала. про профайлеры не в курсе, дайте ссылочку на примеры. спасибо что откликнулись, а то я уже вся извелась тут
...
Рейтинг: 0 / 0
11.05.2012, 15:05:49
    #37789538
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
BlazkowiczС базой данных хорошо бы работать через SwingWorker. Но это на будущее.
Биндинги каждый раз пере-создаются?
Не пора ли познакомиться с профайлером? Так как он уже давно входит в стандартую поставку JDK, то стоит, наверное, узнать как им пользоваться?
и кстати, я со свинг воркером работала, перед началом того куска кода который я выслала, я добавляла:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  SwingWorker worker = new SwingWorker() {
            @Override
            public String doInBackground() {
                jXTable1.setEnabled(false);
                jProgressBar1.setVisible(true);
                jProgressBar1.setIndeterminate(true);
........
мой кусок кода приведенный выше
.......
                jProgressBar1.setIndeterminate(false);
                jProgressBar1.setVisible(false);
                jXTable1.setEnabled(true);
                return "done";
            }
        };
        worker.execute();


но эффекта это не дало, может я конечно не так использую, не знаю даже
...
Рейтинг: 0 / 0
11.05.2012, 15:13:02
    #37789559
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
JulTда, каждый раз при нажатии на узел дерева, вызывается тот кусок кода, который я выслала. про профайлеры не в курсе, дайте ссылочку на примеры. спасибо что откликнулись, а то я уже вся извелась тут
http://habrahabr.ru/post/61857/
http://habrahabr.ru/post/73032/
...
Рейтинг: 0 / 0
11.05.2012, 15:15:51
    #37789566
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
JulTи кстати, я со свинг воркером работала, перед началом того куска кода который я выслала, я добавляла:
но эффекта это не дало, может я конечно не так использую, не знаю даже
Во-первых это, скорее всего, не имеет отношения к вашей проблеме.
Во-вторых, да. Вы его совсем не правильно используете.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
new SwingWorker(){

doInBackground(){
 tovarQuery =ConnectorDB.FrTreePUEntityManager.createQuery("SELECT c FROM Tovar c WHERE c.pathGroup LIKE ?1");
 tovarQuery.setParameter(1, fr.getPath()+"%");
  return org.jdesktop.observablecollections.ObservableCollections.observableList(new java.util.LinkedList(tovarQuery.getResultList()));
}

done(){
   tovarList = get();
   //Вся работа со Swing классами здесь
}

}
...
Рейтинг: 0 / 0
11.05.2012, 15:17:14
    #37789569
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
JulTда, каждый раз при нажатии на узел дерева, вызывается тот кусок кода, который я выслала.
Биндинг, обычно, создаётся один раз. Потом используется. Данные поменяли - через биндинг обновился UI.
Но у вас там, вероятно, разные таблицы на все узлы.
...
Рейтинг: 0 / 0
11.05.2012, 15:44:37
    #37789617
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
BlazkowiczJulTда, каждый раз при нажатии на узел дерева, вызывается тот кусок кода, который я выслала.
Биндинг, обычно, создаётся один раз. Потом используется. Данные поменяли - через биндинг обновился UI.
Но у вас там, вероятно, разные таблицы на все узлы.
нет, табличка одна, а вот когда по строке таблицы клацаю, тогда заполняются другие таблицы, но там проблем уже нет. огромное спасибо за советы. только вот еще вопрос один, как мне создать этот биндинг один раз, дело в том, что вначале таблица загружается пустой, она заполняется только тогда, когда пользователя клацнул по дереву, если я делаю в самом начале:
JTableBinding jTableBinding2 = SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, tovarList, jXTable3);
то ему уже нужно чтобы tovarList был не нулевым, а он нулевой, опять-таки, до тех пор, пока пользователь не нажал по дереву
...
Рейтинг: 0 / 0
11.05.2012, 15:47:48
    #37789626
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
Сделать пустой список и завернуть в ObservableCollection. Потом вместо того чтобы пересоздавать заново, просто удалить всё и добавить новые объекты в список. ObservableCollection нотифицирует всех слушателей и они обновлят отображение.
...
Рейтинг: 0 / 0
11.05.2012, 15:48:45
    #37789630
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
BlazkowiczСделать пустой список и завернуть в ObservableCollection. Потом вместо того чтобы пересоздавать заново, просто удалить всё и добавить новые объекты в список. ObservableCollection нотифицирует всех слушателей и они обновлят отображение.
спасибо, пошла пробовать:)
...
Рейтинг: 0 / 0
11.05.2012, 16:36:59
    #37789723
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
BlazkowiczСделать пустой список и завернуть в ObservableCollection. Потом вместо того чтобы пересоздавать заново, просто удалить всё и добавить новые объекты в список. ObservableCollection нотифицирует всех слушателей и они обновлят отображение.
чет не получается у меня до конца разобраться, вначале подставляю пустую коллекцию:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    bindingGroup2 = new org.jdesktop.beansbinding.BindingGroup();
    tovarList =ObservableCollections.observableList(new java.util.LinkedList(java.util.Collections.emptyList()));
             
     jTableBinding2 = SwingBindings.createJTableBinding(AutoBinding.UpdateStrategy.READ_WRITE, tovarList, jXTable3);
           
        JTableBinding.ColumnBinding columnBinding2 = jTableBinding2.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${id}"));
        columnBinding2.setColumnName("#");
        columnBinding2.setColumnClass(Integer.class);
        columnBinding2.setEditable(false);
.......
ЗДЕСЬ ЖЕ СВЯЗЫВАЮ
        bindingGroup2.addBinding(jTableBinding2);
        jTableBinding2.bind();
        bindingGroup2.bind();


далее идет нажатие на дерево, tovarList заполняется новыми данными:
Код: java
1.
2.
3.
tovarQuery =ConnectorDB.FrTreePUEntityManager.createQuery("SELECT c FROM Tovar c WHERE c.pathGroup LIKE ?1");     
 tovarQuery.setParameter(1, fr.getPath()+"%");
 tovarList =org.jdesktop.observablecollections.ObservableCollections.observableList(new java.util.LinkedList(tovarQuery.getResultList()));


но в табличке данные не показываются, почему? ведь я сделала его как ObservableCollections, что-то я явно делаю не так
...
Рейтинг: 0 / 0
11.05.2012, 16:40:50
    #37789735
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
JulT
Код: java
1.
 tovarList =org.jdesktop.observablecollections.ObservableCollections.observableList(new java.util.LinkedList(tovarQuery.getResultList()));


но в табличке данные не показываются, почему? ведь я сделала его как ObservableCollections, что-то я явно делаю не так
Это вы называете удалить все элементы из коллеции и добавить новые?
Я имел ввиду
tovarList.clear()
tovarList.addAll(tovarQuery.getResultList())
...
Рейтинг: 0 / 0
11.05.2012, 16:56:50
    #37789769
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
BlazkowiczJulT
Код: java
1.
 tovarList =org.jdesktop.observablecollections.ObservableCollections.observableList(new java.util.LinkedList(tovarQuery.getResultList()));


но в табличке данные не показываются, почему? ведь я сделала его как ObservableCollections, что-то я явно делаю не так
Это вы называете удалить все элементы из коллеции и добавить новые?
Я имел ввиду
tovarList.clear()
tovarList.addAll(tovarQuery.getResultList())
сорри, это я ошиблась, не доглядела. вообщем все сделала как вы сказали, но данные не отображаются, сделала tovarList.size(), показало, что 430 записей есть, т.е. запрос отрабатывает, но данные не отображаются
...
Рейтинг: 0 / 0
11.05.2012, 17:01:21
    #37789782
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
JulTсорри, это я ошиблась, не доглядела. вообщем все сделала как вы сказали, но данные не отображаются, сделала tovarList.size(), показало, что 430 записей есть, т.е. запрос отрабатывает, но данные не отображаются
Вероятно вы биндинг недосоздали.
...
Рейтинг: 0 / 0
12.05.2012, 13:33:29
    #37790963
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
BlazkowiczJulTсорри, это я ошиблась, не доглядела. вообщем все сделала как вы сказали, но данные не отображаются, сделала tovarList.size(), показало, что 430 записей есть, т.е. запрос отрабатывает, но данные не отображаются
Вероятно вы биндинг недосоздали.
вообщем что получается, у меня все работает хорошо до тех пор, пока я не нажимаю отсортировать по какой-нибудь колонке, а как только нажала, снова при нажатии на узел начинаются дикие тормоза при отображении данных, что же это за хрень такая, никогда такого не было, всю жизнь выводила данные по тысячу строк, а сейчас такие тормоза
...
Рейтинг: 0 / 0
12.05.2012, 17:11:59
    #37791411
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос, или в чем все-таки дело
Вот это да! Вообщем проблема решилась когда я перешла на более старую версию java 1.6, а вот на java 1.7 все по-прежнему дико тормозит. Интересно все-таки, в чем же причина.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Долгий запрос, или в чем все-таки дело / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]