С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

22.12.2016, 16:08. Просмотров 370. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 раз...

3
LeX
297 / 297 / 80
Регистрация: 30.06.2010
Сообщений: 1,133
22.12.2016, 16:36 #2
тебе надо обернуть выполнение метода query() в отдельный поток.

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

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


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

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

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