Форум программистов, компьютерный форум CyberForum.ru

Java и базы данных

Войти
Регистрация
Восстановить пароль
 
sergey-zzz
0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 2
#1

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

22.12.2016, 16:08. Просмотров 329. Ответов 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;
    }
Что нужно (и как) сделать для обновления иконки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2016, 16:08     Обновление формы во время выполнения SQL запроса
Посмотрите здесь:

Кодировка после выполнения запроса - Java БД
Имеется таблица CREATE TABLE `gtd` ( `ND` char(23) NOT NULL DEFAULT '', `G31_1` varchar(7500) DEFAULT NULL ) ENGINE=MyISAM...

Недопонимание SQL запроса - Java БД
привет всем есть такой вот запрос public boolean deleteRow() { boolean resp = false; try { ...

Сложность SQL запроса и Java - Java БД
Один и тот же код - меняю только вставляемый запрос. в первом случаи 13 тысяч строк выводятся за 20 секунд, а запрос, формирующий 8 строк...

PostgreSQL Обновление JTable - Java БД
Привет всем, может кто поможет с реализацией обновление JTable на нажатие кнопки. Код классов брал от сюда Вот мой конструктор, может...

Обновление отображаемых данных из БД - Java БД
Здравствуйте! Подскажите, пожалуйста, создается форма динамически, на которой размещается выборка из таблицы (запрос Select SQL) и...

MySQL Ошибка запроса - Java БД
Доброго времени суток. У меня есть приложение, которое должно выполнять поиск введенного из формы слова в БД. Есть соответствующий...

MS SQL Динамическое обновление данных на WEB - Java БД
Есть база данных из которой делается выборка и результат отображается в виде числа на WEB странице. Данные меняются периодически как и...

Timeout на время выполнения SQL запроса - C++ Qt
Доброго времени суток! Подскажите пожалуйста, как выставить САБЖ!. Простой пример: m_db = QSqlDatabase::addDatabase("PSQL");...

Разное время выполнения SQL запроса - PHP БД
Добрый день. Вопрос чисто на знание и мое непонимание )). У меня в php коде есть sQL запрос. Результат его 680 строк Запускаю php раз...

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

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

Время выполнения запроса - C++ Builder БД
Здравствуйте! Мне необходимо отправить запрос и вычислить время его выполнения, помогите пожалуйста. Запрос любой, БД oracle Хотя...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LeX
231 / 231 / 59
Регистрация: 30.06.2010
Сообщений: 858
22.12.2016, 16:36     Обновление формы во время выполнения SQL запроса #2
тебе надо обернуть выполнение метода query() в отдельный поток.

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

лучше второй
sergey-zzz
0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 2
22.12.2016, 17:27  [ТС]     Обновление формы во время выполнения SQL запроса #3
Я понимаю что необходим отдельный поток для выполнения SQL. Пробовал потоки Thread и Runnable. У меня не получилось. Мог бы привести примеры своих терзаний, но не буду засорять форум. Приведите пример правильного решения, плииииз. Моих знаний пока не хватает на такую задачу.
Спасибо LeX
LeX
231 / 231 / 59
Регистрация: 30.06.2010
Сообщений: 858
23.12.2016, 09:24     Обновление формы во время выполнения SQL запроса #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) -> {тут делай что надо})
Yandex
Объявления
23.12.2016, 09:24     Обновление формы во время выполнения SQL запроса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru