С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39

ComboBox и БД

22.05.2023, 13:36. Показов 1409. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Посоветуйте ка правильно организовать работу ComboBox с БД.
У меня есть БД в которой есть несколько таблиц type(содержит типы устройство: системный блок, монитор, ибп....), model(конфигурация и модели устройство для каждого типа: монитор-samsung20..; системный блок HP 490 i5/... ), device (тип-модель -серийный номер: монитор-samsung20-1234543435). Каждая таблице имеет индексы-первичный ключ, внешний ключ и на самом деле таблицы содержат значения индексов а не типы и модели устройств, например
таблица type
**************************************
*id(pk)* tipe *
**************************************
* 1 * ибп
* 2 * монитор
* 3 * сист.бл.

таблица model
**************************************
*id(pk)* id_type(fk)*model
**************************************
* 1 * 1 * APC 1100
* 2 * 1 * APC 1000
* 3 * 2 * samsung20
* 4 * 2 * Benq21
* 5 * 3 * HP 490

таблица device
**************************************
*id(pk)* id_type(fk)*id_model(fk)* sn
**************************************
* 1 * 1 * 1 * 123123123
* 2 * 1 * 1 * 234234234
* 3 * 1 * 2 * 456456456
* 4 * 2 * 3 * 444123123
* 5 * 2 * 3 * 555234234
* 6 * 2 * 4 * 666656456
* 7 * 3 * 6 * 777898989
*
*
есть представления
model
**************************************
*id(pk)* tipe * model
**************************************
* 1 * ибп * APC 1100
* 2 * ибп * APC 1100
* 3 * ибп * APC 1000
* 4 * монитор * samsung20
* 5 * монитор * samsung20
* 6 * монитор * Benq21



device
**************************************
*id(pk)* tipe * model * sn
**************************************
* 1 * ибп * APC 1100 * 123123123
* 2 * ибп * APC 1100 * 234234234
* 3 * ибп * APC 1000 * 456456456
* 4 * монитор * samsung20 * 444123123
* 5 * монитор * samsung20 * 555234234
* 6 * монитор * Benq21 * 666656456
* 7 * Сист.бл. * HP 490 * 777898989
*

Дальше, делаю форму с двумя ComboBox'ами type, model и список List - SN(серийный номер)
в type соответственно гружу из БД по запросу типы устройств (ИБП,монитор,сист.бл.)
при выборе типа в список model по запросу к БД грузится соответствующие модели типа, при выборе модели в список List гружу серийные номера.
Вопрос. Когда я выбираю тип устройства из списка (например ИБП) я не знаю его ID что бы по нему найти соответствующие модели. Можно конечно написать запрос и вытащить этот ID и по нему уже искать, можно сделать запрос к таблице представления model и выбрать все соответствующие модели, а потом аналогично и со списком серийных номеров.
Вообще с чем работать с таблицами или представлениями?
Еще вариант, можно в combobox загрузить модель которая будет описывать объект в котором будет храниться ID и type. Как правильно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2023, 13:36
Ответы с готовыми решениями:

Как связать два ComboBox так, чтобы при заполнении одного ComboBox он соответствовал со значением другого ComboBox
Здравствуйте. Помогите мне, пожалуйста, сделать это через SQL запрос! У меня есть одна таблица - Subjects, которая содержит следующие...

[WPF] Можно ли передать данные из ListBox или ComboBox в аналогичный ComboBox?
Можно ли как-то передать данные из ListBox или ComboBox в аналогичный ComboBox ?

Не получается передать список элементов combobox одной формы в combobox другой
Есть две формы, на главной есть список комбобокс, на доченей тоже есть комбобокс... что в конструкторе второй формы надо написать, чтобы в...

6
Заблокирован
22.05.2023, 15:44
Можно работать с представлениями, можно работать напрямую с запросами.
Например, для комбобокса model нужны id и название модели
Следующий запрос для type - выбираете id type и название типа с фильтром по id модели
Девайс - уже лучше выводить в таблицу. в запросе выводите id для удобства, но в таблицу не выводите. id храните в теге или в столбце ширины 0 или с атрибутах ячеек таблицы. id Нужен для обновления таблицы.
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
23.05.2023, 16:22  [ТС]
В итоге сделал так:
создал класс с полем IDtype и полем type
в модели для combobox вытаскиваю из баз эти значения и добавляю type в список для отображения, дальше создаю объект и кидаю в коллекцию.
добавляю обработчик события для комбобокса при выделении нового элемента списка и коллекции даюс значение поля IDtype объекта. Вот код

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
public class modelComboBoxRS extends DefaultComboBoxModel {
        // получение данных из запроса ResultSet
    
    private final List<objItemCombo> collObjCombo = new ArrayList<objItemCombo>();
    public void setDataSource(ResultSet rs, int colID, int colName) throws SQLException {
        // очистим список
        removeAllElements();
        // добавим новые элементы из базы данных
        
        while ( rs.next() ) {
            // получаем строки из столбца column
            objItemCombo objItem =new objItemCombo(rs.getInt(colID),rs.getString(colName));
            addElement(objItem.GETnameItem());
            collObjCombo.add(objItem);
 
        }
    }
    
    public objItemCombo GETobjItemCombo (int index){
        objItemCombo objItemCol=collObjCombo.get(index);
        return objItemCol;
    }
    
}
 
 
 
public class DeviceDialogFrame extends JDialog{
    private modelComboBoxRS mdlComboBox; 
    private int IDtype;
    
    public DeviceDialogFrame(JFrame frm){
        super(frm,"Техническое устрйство");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setModal(true);
        setSize(350,600);
        
 
        Box boxV = Box.createVerticalBox();
        
        
        
        //JLabel lblType = new JLabel("Тип технического устройства:");
        JLabel lbl_typeDevice=new JLabel("Тип технического устройства:");
        lbl_typeDevice.setAlignmentX(JComponent.LEFT_ALIGNMENT);
        
        
        RS_DBdevice RSdevice = new RS_DBdevice();
        ResultSet RS = RSdevice.RStypeDevice();
               
        
        mdlComboBox=new modelComboBoxRS();
        try { 
            mdlComboBox.setDataSource(RS,1,2);
            RS.close();
        } catch (SQLException e) {
                e.printStackTrace();
        }
        
        JComboBox<objItemCombo> cmbType = new JComboBox<objItemCombo>();
        cmbType.setModel(mdlComboBox);
        //cmbType.setPrototypeDisplayValue("Системный блок");// задаем прототип элемента списка
        cmbType.setAlignmentX(JComponent.LEFT_ALIGNMENT);
        cmbType.addActionListener(new ActionListener(){ 
                                    public void actionPerformed(ActionEvent e) {
                                        //Object objItem  = cmbType.getModel().getSelectedItem();
                                        int index = cmbType.getSelectedIndex();
                                        JOptionPane.showMessageDialog(DeviceDialogFrame.this,"index: "+index);
                                        
                                        objItemCombo objItem=mdlComboBox.GETobjItemCombo(index);
                                        IDtype=objItem.GETidItem();
                                        
                                        //objItemCombo objItemC  = cmbType.getModel().getElementAt(index);
                                        JOptionPane.showMessageDialog(DeviceDialogFrame.this,"ID type: "+IDtype);
                                        
                                        
 
                                    }
        });
Все вроде работает, единственное что не нравится что получается создаю коллекцию и туда добавляю объект, а можно ли в комбо сразу добавить объект так что бы потом можно было аналогично вытаскивать значения полей объекта, что если к модели добавить интерфейс List и что бы комбо сам стал коллекцией?
0
Заблокирован
23.05.2023, 16:42
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
Все вроде работает
Очень хорошо. Не забывайте только, пожалуйста, выделять код тегами [CODE] или лучше [JAVA] - это для кода типа Java.

Цитата Сообщение от PavelK_1381 Посмотреть сообщение
единственное что не нравится что получается создаю коллекцию и туда добавляю объект, а можно ли в комбо сразу добавить объект так что бы потом можно было аналогично вытаскивать значения полей объекта, что если к модели добавить интерфейс List и что бы комбо сам стал коллекцией?
C DataSource для ComboBox - зачем такие преобразования - еслив ResultSet из БД несколько полей, а надо их перегруппировать в объект с двумя полями - id, option.
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
23.05.2023, 17:10  [ТС]
не совсем понял вас... имеете ввиду что можно было бы обойтись без DataSource? скажем считывать из RS значения полей и добавлять их в созданный объект, а объект в векторный массив, массив в свою очередь в комбо? так?
0
Заблокирован
23.05.2023, 17:16
Извините, возможно неясно выразился.
Нужен или DataSource или добавлять ComboBoxItem по одному элементу.
Пример - со stackoverflow.com
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
class ComboItem
{
    private String key;
    private String value;
 
    public ComboItem(String key, String value)
    {
        this.key = key;
        this.value = value;
    }
 
    @Override
    public String toString()
    {
        return key;
    }
 
    public String getKey()
    {
        return key;
    }
 
    public String getValue()
    {
        return value;
    }
}
 
//Add the ComboItem to your comboBox.
 
comboBox.addItem(new ComboItem("Visible String 1", "Value 1"));
comboBox.addItem(new ComboItem("Visible String 2", "Value 2"));
comboBox.addItem(new ComboItem("Visible String 3", "Value 3"));
 
//Whenever you get the selected item.
 
Object item = comboBox.getSelectedItem();
String value = ((ComboItem)item).getValue();
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 39
23.05.2023, 19:46  [ТС]
Да... именно это я и искал... попробовал ваш вариант, работает!!!! СПАСИБО!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2023, 19:46
Помогаю со студенческими работами здесь

Combobox в окне с другим фоном. Как убрать белые углы combobox?
Основное окно имеет градиентную заливку фона. Также включены стили windows через манифест. #pragma...

Как при выборе значения в combobox изменить значение другого combobox
Добрый день. Есть допустим бд с таблицей в которой есть name И number. Как сделать так, чтобы при выборе имени в комбобоксе во втором...

Содержимое второго ComboBox-а должно зависеть от выбранного элемента в первом ComboBox-е
Здраствуйте!У меня такая задачка. У меня есть 2 компонента CombBox. В первом я выбираю запись. А во втором записи дожны формироваться в...

Исключение из ComboBox'а значений выбранных в других ComboBox'ов используя Binding
Возможно ли средствами Binding-a решить такую задачку: есть 5 TextBox - ов, и 3 ComboBox - а. значения всех TextBox - ов заносятся в...

Значение ComboBox из таблицы MS SQL, отфильтрованной значением другого ComboBox
Здравствуйте! Подскажите пожалуйста! Имеется подключение к MS SQL. Как для ComboBox сделать источник из таблицы, значения которой...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru