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

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

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

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

22.12.2016, 16:08. Просмотров 348. Ответов 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 БД):

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

время выполнения java - Java
Уважаемые, прошу подсказать, что со временем? $ wc -l cpu/cpuout00-23/cpuout00 553395 cpu/cpuout00-23/cpuout00 $ $ $ time perl...

Как примерно оценить время выполнения проги? - Java
И вообще как текущее время определить?

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
LeX
252 / 252 / 64
Регистрация: 30.06.2010
Сообщений: 958
22.12.2016, 16:36 #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  [ТС] #3
Я понимаю что необходим отдельный поток для выполнения SQL. Пробовал потоки Thread и Runnable. У меня не получилось. Мог бы привести примеры своих терзаний, но не буду засорять форум. Приведите пример правильного решения, плииииз. Моих знаний пока не хватает на такую задачу.
Спасибо LeX
LeX
252 / 252 / 64
Регистрация: 30.06.2010
Сообщений: 958
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) -> {тут делай что надо})
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2016, 09:24
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.12.2016, 09:24
Ответ Создать тему
Опции темы

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