Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 1 / 5
Регистрация: 13.12.2013
Сообщений: 68

Ввод данных в базу данных посредством JTable

16.08.2017, 12:37. Показов 2134. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Друзья прошу помощи. Облазил кучу сайтов нигде не нашел нормального примера. Суть вопроса вот в чем: имеется база данных в хоторой хранится таблица с определенной информацией. создается интерфейс для пользователя, простая форма на которой располагается JTable и кнопка. в JTable выводится содержимое таблицы. при нажатии на кнопку в таблицу добавляется пустая строка которую пользователь заполняет данными. Вопрос как организовать сохранение введенных данных в базе?
вот мой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//это класс коннектор, здесь я загружаю драйвер и устанавливаю соединение с базой, потом использую
//это класс в другом классе просто создав объект этого класса: Connector c=new Connector(); 
import java.sql.*;
import java.io.IOException;
 
public class Conector
{
    public  Connection conn;
    public Statement st; 
    //
    public  Statement connect() throws ClassNotFoundException, SQLException, IOException {
            Class.forName("org.sqlite.JDBC");
            conn = DriverManager.getConnection("jdbc:sqlite:comunale_db.sqlite");
            Statement st = conn.createStatement();
           
        return st;
    }
}
модель данных:

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.table.*;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JPanel;
import java.awt.Dimension; 
import java.awt.Color;
import java.awt.FlowLayout;
 
 
public class DatabaseTableModel  extends AbstractTableModel {
   public DatabaseTableModel dbm;
   public Conector c1;
   
   Statement st;
    public String tableName;
   // public  Connection conn;
  
  JTable table; 
   public ResultSetMetaData metaData = null;
    //
    private ArrayList columnNames = new ArrayList();
    //
    private ArrayList columnTypes = new ArrayList();
    // хранилище для полученных данных из базы данных
    private static ArrayList data = new ArrayList();
 
    
    // 
    public DatabaseTableModel(boolean editable) {
        this.editable = editable;
    }
    private boolean editable;
 
    // 
    @Override
    public int getRowCount() {
        synchronized (data) {
            return data.size();
        }
    }
    // 
 
    @Override
    public int getColumnCount() {
        return columnNames.size();
    }
   
 
    @Override
    public Class getColumnClass(int column) {
        return (Class) columnTypes.get(column);
    }
 
 
    @Override
    public String getColumnName(int column) {
      
        return (String) columnNames.get(column);
        
    }
 
 
    @Override
    public Object getValueAt(int row, int column) {
        synchronized (data) {
            return ((ArrayList) data.get(row)).get(column);
        }
    }
 
    public boolean isCellEditable(int row, int column) {
        return true;
    }
 
    public void removeRow(int rowIndex) {
 
        data.remove(rowIndex);
        fireTableRowsDeleted(rowIndex, rowIndex);
 
    }
 
    //
    public void setDataSource( ResultSet rs) throws Exception {
        // 
        data.clear();
        columnNames.clear();
        columnTypes.clear();
        // 
        ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();
        for (int i = 0; i < columnCount; i++) {
      
            columnNames.add(rsmd.getColumnName(i + 1));
            
            Class type
                    = Class.forName(rsmd.getColumnClassName(i + 1));
            columnTypes.add(type);
        }
       
        fireTableStructureChanged();
   
        while (rs.next()) {
 
            ArrayList row = new ArrayList();
            for (int i = 0; i < columnCount; i++) {
                if (columnTypes.get(i) == String.class) {
                    row.add(rs.getString(i + 1));
                } else {
                    row.add(rs.getObject(i + 1));
                }
            }
            synchronized (data) {
                data.add(row);
             
                fireTableRowsInserted(
                        data.size() - 1, data.size() - 1);
 
            }
        }
    }
 
 
 public void addRow(Vector<?> vec)
    { ArrayList<Object> data_row=new ArrayList<Object>();
    data_row.addAll(vec);
    data.add(data_row);
    }
 
 
 
  //---------------------------
  public  DatabaseTableModel  main_mm() {
        String headers[] = {"a1", "b"};
        // инициализация JDBC
        try {
            c1=new Conector();
            st=c1.connect();
            
            ResultSet rs = st.executeQuery(
                    "select * from main_table");
             dbm  = new DatabaseTableModel(true);
            dbm.setDataSource(rs);
            rs.close();
            //conn.close();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null,
                    ex.getMessage(), "Ошибка подключения к БД!",
                    JOptionPane.ERROR_MESSAGE);
        }
      return dbm;
    }
 
 
}
рисую интерфейс:

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
81
82
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.table.*;
import java.sql.*;
import java.util.*;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JPanel;
import java.awt.Dimension; 
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import javax.swing.event.TableModelListener;
 
 
public class mainF extends JFrame
{
    DatabaseTableModel d1;
    
    public mainF()
    {
        
      
            this.setLayout(new BorderLayout());
            this.setSize(1200, 800);
            this.setExtendedState(this.MAXIMIZED_BOTH);
            JPanel p1 = new JPanel();
            p1.setBounds(0, 0, 200, this.getSize().height);
             p1.setBackground(Color.BLUE);
           JButton button1 =new JButton("Add Row");
           
           p1.add(button1);
            d1=new DatabaseTableModel(true);
 
 
            JTable table = new JTable(d1.main_mm());
             button1.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e) {
                   Vector vPoints = new Vector();
                   vPoints.addElement("");
                   vPoints.addElement("");
                   d1.addRow(vPoints);
                   d1.fireTableDataChanged();
                   table.revalidate();
                   table.repaint();
                  // System.out.println("9999");
               }
          });
            table.setAutoCreateColumnsFromModel(true);
           table.setIgnoreRepaint(false);
            table.getColumnModel().getColumn(0).setHeaderValue("Арендатор");
            table.getColumnModel().getColumn(1).setHeaderValue("Номер");
            //изменяем ширину колонок
            table.getColumnModel().getColumn(0).setWidth(300);
            table.getColumnModel().getColumn(0).setMinWidth(300);
            table.getColumnModel().getColumn(0).setMaxWidth(300);  
            table.getColumnModel().getColumn(1).setWidth(100);
            table.getColumnModel().getColumn(1).setMinWidth(100);
            table.getColumnModel().getColumn(1).setMaxWidth(100); 
            table.setRowHeight(30);
            table.getTableHeader().resizeAndRepaint(); 
        
          getContentPane().add(new JScrollPane(table));
         
           this.add(p1, BorderLayout.EAST);
           getContentPane().setBounds(220, 20, 600, 1000);
            this.setVisible(true);
            this.setLocationRelativeTo(null);
         
          
    }
 
}
класс Run

Java
1
2
3
4
5
6
7
8
9
10
11
public class run
{
  
    public static void Main()
    {
       //d1=new DatabaseTableModel(true);
       //d1.main_mm();
       new mainF();
       
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2017, 12:37
Ответы с готовыми решениями:

Проблема с записью значение записи из JTable в базу данных
На форме имеется jTable, значения в который добавляются из базы по нажатии кнопки (добавление работает, с базы считывает) В базе такие...

Как создать базу данных посредством PDO?
День добрый! Как создать базу данных посредством PDO?

Вывод и ввод данных в базу данных
Чат. При переходе на Index.php просит зарегестрироваться или войти, после входа он перебрасывает на chat.php тут к нему подключаются два...

1
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
22.08.2017, 09:51
Начни отсюда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.08.2017, 09:51
Помогаю со студенческими работами здесь

Импорт из csv в базу данных посредством php скрипта
Привет, друзья. Есть php скрипт &lt;?php $file_name = 'сайт.ру/uploads/files/content.csv'; // абсолютный путь до файла //$file_name =...

Добавление новой записи в базу данных посредством php
Нужно добавить новую запись в базу данных, как реализовать загрузку изображения...уже 2 недели ломаю голову, php знаю плохо,помогите,добрые...

Добавление и редактирование новой записи в базу данных посредством php
Приветствую, мне необходимо реализовать добавление и редактирование записей из php, пробовал уже разные способы, искал в интернете, не...

Пакетная передача обновлений (Insert) в базу данных посредством DataAdapter.Update
Здравствуйте, господа :yes: Кто-нибудь имел дело с пакетной передачей обновлений (а конкретно вставок) в базу данных посредством...

Ввод данных в базу
День добрый, хочу сразу сказать что я на php всего 2 день пишу и ни чего не знаю, а надо написать... Вопросов много, начну с более...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru