Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 2
Регистрация: 28.09.2012
Сообщений: 161

После ввода данных нужно что-бы таблица обновлялась и отображала добавленные данные

28.01.2014, 16:04. Показов 1515. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Есть таблица которая отображает данные с бд., модель данных таблицы унаследована от AbstractTableModel. После ввода данных нужно что-бы таблица обновлялась и отображала добавленные данные.

Знаю, что это делается через оповещение всех слушателей модели.

Есть два класса:
1-здесь описана таблица,
2-здесь вносятся данные в бд.

Как со второго класса оповестить слушателя модели данных не могу понять.
Подскажите пожалуйста.

Добавлено через 3 часа 42 минуты
Ребята, напишите хоть что нибудь, задавайте вопросы, если что не понятно
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2014, 16:04
Ответы с готовыми решениями:

Таблица не обновляется после ввода данных
У меня на главной форме есть таблица DBGrid где данные из БД отображены по запросу через компонент ADOQuery. Для того чтобы добавить...

После закрытия приложения и его повторного запуска, добавленные данные исчезают из БД
Доброго времени суток, уважаемые! Проблема следующего характера: есть приложение, мной написанное, работающее с БД access (mdb). Данные...

есть таблица в миниатюре. нужно что бы когда ставим галочку данные строки добавились в другую таблицу
Доброго времени суток, помогите пожалуйста сделать. есть таблица в миниатюре. нужно что бы когда ставим галочку данные строки...

7
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.01.2014, 16:47
А если на таблице просто вызвать revalidate после обновления модели?
0
0 / 0 / 2
Регистрация: 28.09.2012
Сообщений: 161
29.01.2014, 11:33  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
А если на таблице просто вызвать revalidate после обновления модели?
Пробовал, не выходит. Может есть еще способы?

Добавлено через 36 минут
Когда перезапускаю программу новые данные появляются.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
29.01.2014, 11:42
А, так Вы в базу данные кладете? Ну, тогда таблицу надо перечитывать. В смысле, данные в модели перечитывать. А потом уже revalidate звать.
0
0 / 0 / 2
Регистрация: 28.09.2012
Сообщений: 161
29.01.2014, 14:22  [ТС]
Ну, тогда таблицу надо перечитывать. В смысле, данные в модели перечитывать
как мне перечитать таблицу?

данные в таблицу поступают через:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
public class DefTable extends AbstractTableModel {
 
    private static final long serialVersionUID = 1L;
    private ArrayList<String> columnNames = new ArrayList<String>();
    private ArrayList<Class> columnTypes = new ArrayList<Class>();
    private ArrayList<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();
 
    //количество строк
    public int getRowCount() {
        synchronized (data) {
            return data.size();
        }
    }
 
    //количество Столбцов
    public int getColumnCount() {
        return columnNames.size();
    }
 
    //данные в ячейках
    public Object getValueAt(int row, int col) {
        synchronized (data) {
            return ((ArrayList)data.get(row)).get(col);
        }
    }
 
    public String getColumnName(int col) {
        return columnNames.get(col);
    }
 
    public Class getColumnClass(int col) {
        return columnTypes.get(col);
    }
 
    public boolean isCellEditable(int row, int col) {
        return false;
    }
 
    // замена значения ячейки
    public void setValueAt(Object obj, int row, int col) {
        synchronized (data) {
            ((ArrayList)data.get(row)).set(col, obj);
        }
    }
 
    public void setDataSource(ResultSet rs) throws SQLException,
            ClassNotFoundException {
        ResultSetMetaData rsmd = rs.getMetaData();
        columnNames.clear();
        columnTypes.clear();
        data.clear();
 
        int columnCount = rsmd.getColumnCount();
            columnNames.add("Идент.№");
            columnNames.add("Дата анализа");
            columnNames.add("ФИО");
            columnNames.add("Год рожд.");
            columnNames.add("Пол");
            columnNames.add("Код");
            columnNames.add("ЛПУ");
        for (int i = 0; i < columnCount; i++) {
                        
            Class type = Class.forName(rsmd.getColumnClassName(i + 1));
            columnTypes.add(type);
        }
 
        while (rs.next()) {
            ArrayList rowData = new ArrayList();
            for (int i = 0; i < columnCount; i++) {
                if (columnTypes.get(i) == String.class) {
                    rowData.add(rs.getString(i + 1).trim());
                } else
                    rowData.add(rs.getObject(i + 1));
            }
            synchronized (data) {
                data.add(rowData);
                this.fireTableRowsInserted(data.size() - 1, data.size() - 1);
            }
        }
    }
Класс где добавляются данные:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class ButSaveEvent implements ActionListener{
    private DefTable dt;
    private JTable tbl;
    private ScriningComponents scrinComp;
 
    public ButSaveEvent(JTable tbl, DefTable dt, ScriningComponents sc){
        this.tbl = tbl;
        this.dt = dt;
        this.scrinComp = sc;
    }
 
    @Override
    public void actionPerformed(ActionEvent e){
        DateFormat formatter;
        Date convertedDate;
        java.sql.Date currentDate;
        String stringDateFormat = scrinComp.getTexField(1).getText();
 
        formatter = new SimpleDateFormat("dd.MM.yyyy");
        try {
            convertedDate = formatter.parse(stringDateFormat);
            currentDate = new java.sql.Date(convertedDate.getTime());
            Connection conn = ConnToDb.CreatingConnector();
 
            final String PATIENT_Q = "INSERT INTO SCRINING.PATIENTS VALUES (DEFAULT, ?, ?," +
                    "(SELECT S_ID from SCRINING.SEX WHERE S_NAME LIKE ?))";
            PreparedStatement psPatients = conn.prepareStatement(PATIENT_Q);
            psPatients.setString(1, scrinComp.getTexField(2).getText());
            psPatients.setInt(2, Integer.parseInt(scrinComp.getTexField(3).getText()));
            psPatients.setString(3, scrinComp.getComboBox(0).getSelectedItem().toString());
            psPatients.executeUpdate();
            psPatients.close();
 
            final String SCRINING_Q = "INSERT INTO SCRINING.SCRIN VALUES (DEFAULT, ?, " +
            "(SELECT AD_ID FROM DATES.ANALYZIS_DATE WHERE AD_NAME = ?), " +
                    "(SELECT P_ID FROM SCRINING.PATIENTS WHERE P_NAME = ?), " +
                    "(SELECT K_ID FROM SCRINING.KOD WHERE K_NUMB = ?), " +
                    "(SELECT L_ID FROM SCRINING.LPU WHERE L_NUMB = ?))";
 
            PreparedStatement psScrining = conn.prepareStatement(SCRINING_Q);
            psScrining.setInt(1, Integer.parseInt(scrinComp.getTexField(0).getText()));
            psScrining.setDate(2, currentDate);
            psScrining.setString(3, scrinComp.getTexField(2).getText());
            psScrining.setString(4, scrinComp.getComboBox(1).getSelectedItem().toString());
            psScrining.setInt(5, Integer.parseInt(scrinComp.getComboBox(2).getSelectedItem().toString()));
            psScrining.executeUpdate();
            psScrining.close();
 
       } catch (SQLException e1) {
            e1.printStackTrace();
       } catch (ParseException e1) {
            e1.printStackTrace();
        }
    }
}
Добавлено через 9 минут
Подскажите как перечитать данные в модели?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
29.01.2014, 15:12
Цитата Сообщение от neger Посмотреть сообщение
Подскажите как перечитать данные в модели?
После добавления новых данных в базу сделать опят запрос и вызвать у модели данных таблицы setDataSource. Как Вы в первый раз данные показываете?
1
0 / 0 / 2
Регистрация: 28.09.2012
Сообщений: 161
29.01.2014, 16:12  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
После добавления новых данных в базу сделать опят запрос и вызвать у модели данных таблицы setDataSource. Как Вы в первый раз данные показываете?
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class Golovna extends Visual {
    private JTable mainTable;
    private ResultSet rsMainTable;
    private DefTable dtm = new DefTable();
    
    public Golovna() throws SQLException {
        setTitle("Скрининговые исследования");
        initGolovna();
        showTable();
        showPanelEast();
    }
 
    private void showTable() throws SQLException {
        String querry = "";
        int[] columnSize = {95, 105, 350, 75, 35, 75, 45};
        CellRender cellRend = new CellRender();
    HearderRender herderRend = new HearderRender();
    java.util.Date endDate = new java.util.Date();
        java.util.Date startDate = new java.util.Date();
 
        startDate.setMonth(endDate.getMonth() - 1);
        java.sql.Date sqlStartDate = new java.sql.Date(startDate.getTime());
 
        querry = "SELECT S_NUMBER, AD_NAME, P_NAME, P_DATE, S_NAME, K_NUMB, L_NUMB " +
                "FROM SCRINING.SCRIN, DATES.ANALYZIS_DATE, SCRINING.PATIENTS, SCRINING.SEX, SCRINING.KOD, SCRINING.LPU " +
                "WHERE AD_NAME >= ? " +
                "AND S_ID_DATE = AD_ID " +
                "AND S_ID_PATIENT = P_ID " +
                "AND SCRINING.SEX.S_ID = P_ID_SEX " +
                "AND S_ID_KOD = K_ID " +
                "AND S_ID_LPU = L_ID " +
                "ORDER BY S_NUMBER";
 
        Connection conn = ConnToDb.CreatingConnector();
        PreparedStatement prst = conn.prepareStatement(querry, ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_UPDATABLE);
        prst.setDate(1, sqlStartDate);
        rsMainTable = prst.executeQuery();
        try {
            dtm.setDataSource(rsMainTable);
            if (rsMainTable != null);
            mainTable = new JTable(dtm);
            for (int i = 0; i < rsMainTable.getMetaData().getColumnCount(); i++)
            {
                mainTable.setDefaultRenderer(dtm.getColumnClass(i), cellRend);
                mainTable.getTableHeader().setDefaultRenderer(herderRend);
                mainTable.getColumnModel().getColumn(i).setPreferredWidth(columnSize[i]);
            }
 
            mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
            mainTable.setRowHeight(20);
            mainTable.setOpaque(false);
            mainTable.setFocusable(false);
 
            JScrollPane sp = new JScrollPane(mainTable);
            sp.setOpaque(true);
            sp.getViewport().setBackground(new Color(250, 250, 250));
            sp.setBorder(new LineBorder(new Color(1, 1, 1, 1)));
            pCenterTop.add(sp, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.NORTHWEST,
                    GridBagConstraints.BOTH, new Insets(0,0,0,0), 0, 0));
 
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
}
запрос в бд осущ. с помощью PreparedStatement для удобства работы с полями типа Date.
далее созд. таблица mainTable вот она то и не хочет перерисовиваться.
0
0 / 0 / 2
Регистрация: 28.09.2012
Сообщений: 161
03.04.2014, 10:42  [ТС]
Обновляю рассмотрение данной темы.
Есть еще вопросы, на которые не могу найти ответов.

1. Если таблица будет содержать много строк (600000) есть ли смысл
После добавления новых данных в базу сделать опят запрос и вызвать у модели данных таблицы setDataSource
, есть способ обновлять только новые данные?

2. (Если у 1 вопроса - нет вариантов) Не выходит обновить таблицу при вызове tableModel.fireTableDataChanged() - почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2014, 10:42
Помогаю со студенческими работами здесь

Как сделать так, чтобы диаграмма, которая отображает данные, также отображала и вновь введённые данные?
При вводе новых значений в таблицу Excel в ней увеличив-ся количество строк. Вопрос состоит в следущем: как сделать так, чтобы диаграмма,...

Авторизация - после ввода данных выводит сообщения, что юзера нету, хотя он есть
Ребята, помогите пожалуйста. Php недавно начал изучать, так что нуб пока... проблема с авторизацией, после ввода данных, выводит...

7.7 таблица в режиме ввода данных
Господа программеры, подскажите, возможен ли сабж? Илли может подскажите альтернативу... (таблицу значений на форме не предлагать :D ) ...

1c7. ТАБЛИЦА в режиме ввода данных
Есть ТАБЛИЦА в режиме ввода данных с нефиксированным колвом строк. Вначале открывается пустой, потом програмно заполняю ее частю значений,...

Добавленные данные не сохраняются в БД
Возникла проблема, есть небольшая база данных на MS Access, база хранится на сетевом диске. Изначально база пустая, при добавлении записи,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru