|
|
|
Не работает обновление JTable
|
|||
|---|---|---|---|
|
#18+
После выполнения Код: java 1. таблица JTable не перерисовывается, хотя данные в БД вставляются и после следующего запуска приложения отображаются. Не помогает ни один из методов ниже. Код: java 1. 2. 3. где private DatabaseTableModel tmCity; private JTable tCity; У кого какое мнение о том, что я упустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 01:32 |
|
||
|
Не работает обновление JTable
|
|||
|---|---|---|---|
|
#18+
RENO4После выполнения Код: java 1. таблица JTable не перерисовывается, хотя данные в БД вставляются и после следующего запуска приложения отображаются. Не помогает ни один из методов ниже. Код: java 1. 2. 3. где private DatabaseTableModel tmCity; private JTable tCity; У кого какое мнение о том, что я упустил? А где добавление данных в tmCity? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 01:36 |
|
||
|
Не работает обновление JTable
|
|||
|---|---|---|---|
|
#18+
RENO4, repaint/revalidate - нахрен. Не нужны они тут. executeUpdate добавляет данные в БД, каким образом оно с JTable связано? Где TableModel? Используйте PreparedStatement для работы с параметрами SQL запроса. У вас тут SQL Injection обыкновенный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 08:56 |
|
||
|
Не работает обновление JTable
|
|||
|---|---|---|---|
|
#18+
JulT, Сделал Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Потом оказалось, что ResultSet оказался закрытым, пришлось писать еще код, чтобы еще раз его заново открыть, фактически еще раз выполнить SELECT: Код: 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. и перед вызовом Refresh запускать вызов selectDicRow. Как-то грустно от такой логики, неужели все так плохо в Java? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 16:15 |
|
||
|
Не работает обновление JTable
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Сначала было так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Теперь, после всего, уже заменил вызов q.executeQuery на selectDicRow ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 16:19 |
|
||
|
Не работает обновление JTable
|
|||
|---|---|---|---|
|
#18+
RENO4Как-то грустно от такой логики, неужели все так плохо в Java? Во-первых Swing и JDBC это не вся Java. С Java всё отлично. А вот от логики которую вы напедалировали, действительно, грустно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 16:27 |
|
||
|
Не работает обновление JTable
|
|||
|---|---|---|---|
|
#18+
RENO4, Косяки, которые бросаются в глаза: - data.clear() удаляет все строки, но соответствующей нотификации мы модели не посылаем. Потом мы добавляем строки, но вызывает fireTableRowsInserted. С точки зрения событий выходит что строки только добавляются? - Забавно видеть как метод fireTableRowsInserted с параметрами "от" и "до" вызывается в цикле для каждой новой строки. - synchronized в однопоточном GUI. Ну, просто чтобы был, да? Хорошо что в современной JVM есть оптимизация такой ситуации. - ResultSet постоянно создаётся и не понятно где закрывается. Так очень просто организовать утечку как памяти так и соединений к базе. - Нужно контролировать чтобы addMouseListener() в одном месте вызывался не более одного раза. Иначе без удаления будет ещё одна утечка памяти. - Работу с БД хорошо бы организовать через SwingWorker. Иначе UI будет замирать во время запросов и вы опять будете говорить что это Java тормозит. Это по коду. Теперь концептуально. Нужно для начала продумать как именно вы хотите подружить UI с базой. Есть несколько вариантов. 1) Использовать scrollable result set и напрямую читать в TableModel из ResultSet. Из недостатков, необходимость держать соединение с БД и общая тормознутость. Основной плюс - нет ограничения по объему данных. 2) Вычитываем запросом всё в память. TableModel читает из памяти. Тут есть варианты. Наиболее распространенный подход это, конечно же ArrayList. Но есть и альтернатива в виде RowSet/CachedRowSet, которая будет по коду очень совместима с первым вариантом. 3) Самым сложным вариантом является постраничное чтение, которое позволяет минимизировать данные в памяти, но при этом иметь доступ к большому объему данных. Пользы от этого, правда, мало, а реализация будет очень сложной. К тому же для словарей не актуально вообще. Ну, и по вашему коду очень сложно понять чего вы вообще пытаетесь добиться? Чтение из разных таблиц в одну JTable? Обновление из БД по нажатию кнопки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 16:52 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2124382]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 385ms |

| 0 / 0 |
