Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 2
1

Обновление формы во время выполнения SQL запроса

22.12.2016, 16:08. Показов 660. Ответов 3
Метки нет (Все метки)

Всем добрый день

На главной форме в StatusBar хочу при выполнении SQL запроса устанавливать необходимую иконку.
Java
1
2
3
4
5
6
7
8
    public static void setConnIN(JLabel label){ //запись
        label.setIcon(createIcon(IconConnIN));
        label.repaint();
    }
    public static void setConnUP (JLabel label){  //считывание
        label.setIcon(createIcon(IconConnUP));
        label.repaint();
    }
Но очевидно из-за занятости основного потока этого не происходит.
Для выполнения запросов у меня существует код подготавливающий сам запрос

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
    public Object query (String sql, Object[] params) throws SQLException{
        PreparedStatement stmt = null;
        Connection dbConnection = null;
        DBFrame.setConnUP(DBFrame.lbCon1);       //здесь пытаюсь обновить иконку
        CachedRowSetImpl crs = new CachedRowSetImpl() ;
        try{
            dbConnection = connectionPool.getConnection(); //connectionPool
            stmt = dbConnection.prepareStatement(sql);
            this.fillStatement(stmt, params);
            ResultSet result = stmt.executeQuery();
            crs.populate(result);
        } catch (SQLException e){
            rethrow(e, sql, null);
        }
        finally {
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e){
                    System.out.println("Ошибка закрытия stat: " + e);
                }
            }
            if (dbConnection != null) {
                try {
                    dbConnection.close();
                    DBFrame.setConnON(DBFrame.lbCon1); //здесь пытаюсь обновить иконку
                } catch (SQLException e){
                    System.out.println("Ошибка закрытия Connect: " + e);
                }
            }
        }
        return crs;
    }
Что нужно (и как) сделать для обновления иконки?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2016, 16:08
Ответы с готовыми решениями:

Timeout на время выполнения SQL запроса
Доброго времени суток! Подскажите пожалуйста, как выставить САБЖ!. Простой пример: m_db =...

Разное время выполнения SQL запроса
Добрый день. Вопрос чисто на знание и мое непонимание )). У меня в php коде есть sQL запрос....

Необходимо увеличить время ожидания выполнения sql запроса
Как увеличить время? Запрос выполняется 1,5 минуты, asp.net по прошествию 30 секунд отваливается. ...

Прелоада (смена курсора) во время выполнения тяжелого SQL-запроса
Здравствуйте, есть SQL-запрос, который обрабатывается довольно долго, может 10 секунд и более. В...

3
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
22.12.2016, 16:36 2
тебе надо обернуть выполнение метода query() в отдельный поток.

посмотри в сторону java.util.concurrent.ExecutorService.submit() или java.util.concurrent.CompletableFuture.handle()

лучше второй
0
0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 2
22.12.2016, 17:27  [ТС] 3
Я понимаю что необходим отдельный поток для выполнения SQL. Пробовал потоки Thread и Runnable. У меня не получилось. Мог бы привести примеры своих терзаний, но не буду засорять форум. Приведите пример правильного решения, плииииз. Моих знаний пока не хватает на такую задачу.
Спасибо LeX
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.12.2016, 09:24 4
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
    public CompletableFuture<Object> query (String sql, Object[] params) {
        return CompletableFuture.supplyAsync(()-> {
            PreparedStatement stmt = null;
            Connection dbConnection = null;
            DBFrame.setConnUP(DBFrame.lbCon1);       //здесь пытаюсь обновить иконку
            CachedRowSetImpl crs = new CachedRowSetImpl() ;
            try{
                dbConnection = connectionPool.getConnection(); //connectionPool
                stmt = dbConnection.prepareStatement(sql);
                this.fillStatement(stmt, params);
                ResultSet result = stmt.executeQuery();
                crs.populate(result);
            } catch (SQLException e){
                rethrow(e, sql, null);
            }
            finally {
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e){
                        System.out.println("Ошибка закрытия stat: " + e);
                    }
                }
                if (dbConnection != null) {
                    try {
                        dbConnection.close();
                    } catch (SQLException e){
                        System.out.println("Ошибка закрытия Connect: " + e);
                    }
                }
            }
            return crs;
        });
    }
Java
1
x.query(...).whenComplete((obj, exception) -> {тут делай что надо})
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2016, 09:24

Время выполнения запроса
Здравствуйте! Мне необходимо отправить запрос и вычислить время его выполнения, помогите...

Время выполнения запроса
Работаю с MSSQL. Выполняю параметрический запрос. В 1-ый раз время выполнения запроса - 17 сек....

Обновление первичного ключа после выполнения запроса
У меня в классе есть такой метод: public void Delete(int id) { using...

Обновление поля, время выполнения
Понадобилось сделать +1 к просмотру записи. UPDATE `TABLE` SET `view` = view+1 WHERE `id` = ...

Большое время выполнения запроса
Здравствуйте, уважаемые форумчане! Имеется функция: function...

Время выполнения запроса INSERT
Произвожу запись в БД с помощью INSERT. количество строк для записи варьирует от 1 до 3000. На...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru