powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Progressbar и Бд
14 сообщений из 14, страница 1 из 1
Progressbar и Бд
    #39020159
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть достаточно большая база данных, в которой осуществляется поиск и удаление дубликатов. Процесс достаточно долгий, поэтому хотелось бы прикрутить к процессу progressbar, но не могу понять, как пеально отобразить ход процесса.
Подсчет количества элементов, которые надо удалить, осуществляется несколько быстрее, но ненамного
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020193
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работать с курсором?
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020202
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett, можно немного подробнее?
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020223
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
Хранимка сбрасывает процент в табличку. На клиенте раз в сек читаешь ее.
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020234
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, хранимой процедуры нет, если я правильно вас понял. Я только учусь и поэтому подумал, что могу обойтись без нее
Вот код, на работу которого я хотел бы повесить бар.
Если он совсем кривой, буду рад пояснениям.
Код: 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.
jTable1.addKeyListener(new KeyListener() {
        @Override
            public void keyPressed(KeyEvent e) {
          
                                // Обработчик нажатия на DELETE                
            if(e.getKeyCode() == KeyEvent.VK_DELETE) {          
                try{
                      row=jTable1.convertRowIndexToModel(jTable1.getSelectedRow());
                      String max_id="SELECT MAX(id) FROM changes WHERE inv='"+jTable1.getModel().getValueAt(row, 1).toString() +"' AND ip='"+jTable1.getModel().getValueAt(row, 2).toString()+"' AND mac='"+jTable1.getModel().getValueAt(row, 3).toString()+"';";
                
                      int id=0; 
               
                     pst_max=conn.prepareStatement(max_id);
                     rs_max = pst_max.executeQuery();
                             
                    while(rs_max.next()) {    // определяем наибольший id
                        id = rs_max.getInt(1);
                    }
                    rs_max.close();
                    pst_max.close();
                                     
                  String del_str="DELETE FROM changes WHERE inv='"+jTable1.getModel().getValueAt(row, 1).toString() +"' AND ip='"+jTable1.getModel().getValueAt(row, 2).toString()+"' AND mac='"+jTable1.getModel().getValueAt(row, 3).toString()+"' AND id<"+id+";";
               
                pst_max=rnbConfig.conn.prepareStatement(del_str);
              
                int count_del= pst_max.executeUpdate();
               
                
                JOptionPane.showMessageDialog(null,"Удалено: "+count_del+" записей");
                rs_max.close();
                pst_max.close();
                jProgressBar1.setIndeterminate(false);
              
                }
            catch(Exception ex) {
            JOptionPane.showMessageDialog(null, "Line 129, Error = "+ ex);
            }
           UpdateJTable();     
        }
    
}

            @Override
            public void keyTyped(KeyEvent e) {
                 }

            @Override
            public void keyReleased(KeyEvent e) {
                }
        });
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020268
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
в коде, проставь время или длительность.
Раз у тебя - "долго".
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020278
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, еще бы я знал это время) оно каждый раз разное.
Я правильно, кстати, понимаю, что надо бы в разные потоки разнести бар и запрос?
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020288
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinPetro123, еще бы я знал это время) оно каждый раз разное.
Я правильно, кстати, понимаю, что надо бы в разные потоки разнести бар и запрос?
ещё раз.
Сначала конкретные логи со временем по проблеме. Потом пути решения проблемы.
Удачи!
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020294
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведу свой код на эту тему, и я бы вынес код в листенере в отдельный метод, а то как-то нагромаждено получается всё в одно...
еще и селекты тут же
Код: 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.
 private void setPaymentScheduleButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                         
        final JDesktopPane desktopPane = this.getDesktopPane();

        SwingWorker sw = new SwingWorker() {
            @Override
            protected Object doInBackground() throws Exception {
                boolean okSend = false;
                try {
                    crpt.saveSelectionIntervalToTempArray();
                    okSend = dialog.showDialogAndSetPaymentSchedule(desktopPane, crpt.getSelectedDPList(), progressBar);
                } catch (DataAccessException | SQLException ex) {
                    Logger.getLogger(RequestProcessingIntFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (okSend) {
                    crpt.setPreFilters(hideNotMyDPsCB.isSelected(), hideComplitedPDsCB.isSelected(), searchDPTF.getText());
                    crpt.createRequestProcessingTable();
                }
                return null;
            }

            @Override
            public void done() {

            }
        };
        sw.execute();
    }                        



и отдельно метод который показывает у меня диалоговое окно чтобы чел ввел параметры

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public boolean showDialogAndSetPaymentSchedule(JDesktopPane f, List<DinamicParams> selectedDPList, JProgressBar progressBar) throws DataAccessException, SQLException {
        this.selectedDPList = selectedDPList;
        TextField tf = new TextField();
        tf.setSize(300, 50);
        tf.setText(paymentSchedule);
        int res = JOptionPane.showOptionDialog(f, tf, "Введите возможный график оплаты",
                JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[]{"Сохранить!", "Отмена"}, tf);
        if (res == JOptionPane.OK_OPTION) {
            progressBar.setIndeterminate(true);
            confirmSetPaymentSchedule(tf);
            paymentSchedule = tf.getText();
            progressBar.setIndeterminate(false);
            return true;
        } else {
            System.out.println("Отменена установка графика оплаты поставщику.");
        }
        return false;
    }




Во втором куске про прогресбар тут:

Код: java
1.
2.
3.
4.
            progressBar.setIndeterminate(true); // начинает крутиться
            confirmSetPaymentSchedule(tf); // в методе идет работа с бд
            paymentSchedule = tf.getText(); // значение сохраняется, чтобы можно было его использовать при повторном открытии окна
            progressBar.setIndeterminate(false);  // прогрес бар гаснет




Код не претендует на идеальный, но это из первой версии, в нем помимо всего и комментариев почти нет.
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020297
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но у меня не считает проценты, и как считать их для запроса бд я даже и не знаю, но подозреваю, что как и сказали - через хранимую процедуру.
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020461
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinДобрый день.
Есть достаточно большая база данных, в которой осуществляется поиск и удаление дубликатов. Процесс достаточно долгий, поэтому хотелось бы прикрутить к процессу progressbar, но не могу понять, как пеально отобразить ход процесса.
Подсчет количества элементов, которые надо удалить, осуществляется несколько быстрее, но ненамного

Чтобы работать с progressbarom Вы должны знать абсолютное значение чего-то(что и есть вся шкала)
В вашем случае
1.Выясняем сколько записей дубликатов надо удалить.
2.Далее только работа на стороне клиента...через курсор.
Выбирается текущая запись ,-удаляется или через "delete" или через пакет,процедуру и т.д.
Он удаляет записи и прибавляет счётчик.
На базе этого счётчика в другом потоке перерисовывается progressbar.

Если у Вас удаляется на сервере процедурой.
Обычно делают анимационный прогрессбар .Который просто что-то крутит или двигает,сообщая пользователю,что типа процесс идёт.
А когда у вас процедура отработала то программа закрыла это диалоговое окно с анимационным прогрессбаром
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020576
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно необязательно делать точный progress-bar.

Мои личные наблюдения над GUI и пользователями подсказывают
что вполне возможно большой JOB разбить на порции к примеру
0%, 25%,50% и 100% и транслировать грубый progress bar.

Второй вариант. Если мы заведомо знаем что вчера аналогичный
джоб работал 2 часа. И сегодня база подросла на тот-же инкремент
то и чистка будет работать сегодня тоже 2 часа. На основании
этого можно рисовать красивую анимацию и пользователю
будет вобщемто пофиг что она не отражает реалии.
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020671
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предлагаю посмотреть на проблему под другим углом. либо ТС удаляет стопицот миллионов записей с каскадами либо у него там индексов просто нет и delete запрос шерстит те самые стопицот миллионов. ставлю на второе.
...
Рейтинг: 0 / 0
Progressbar и Бд
    #39020691
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там скорее всего 2-3 уровня ссылочных констрейнтов. Ситуация сама по себе нормальная
просто никто не думал об оптимизации чистки.

Я-бы с некоторыми допущениями делал тихо, ночью, disable constr + свою логику исходя
из условий.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Progressbar и Бд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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