0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 26
1

ComboBox и БД

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

Author24 — интернет-сервис помощи студентам
Добрый день! Посоветуйте ка правильно организовать работу 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2023, 13:36
Ответы с готовыми решениями:

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

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

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

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

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

6
Matthias Ronald Gerard
149 / 209 / 25
Регистрация: 11.08.2022
Сообщений: 2,066
22.05.2023, 15:44 2
Можно работать с представлениями, можно работать напрямую с запросами.
Например, для комбобокса model нужны id и название модели
Следующий запрос для type - выбираете id type и название типа с фильтром по id модели
Девайс - уже лучше выводить в таблицу. в запросе выводите id для удобства, но в таблицу не выводите. id храните в теге или в столбце ширины 0 или с атрибутах ячеек таблицы. id Нужен для обновления таблицы.
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 26
23.05.2023, 16:22  [ТС] 3
В итоге сделал так:
создал класс с полем 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
Matthias Ronald Gerard
149 / 209 / 25
Регистрация: 11.08.2022
Сообщений: 2,066
23.05.2023, 16:42 4
Цитата Сообщение от PavelK_1381 Посмотреть сообщение
Все вроде работает
Очень хорошо. Не забывайте только, пожалуйста, выделять код тегами [CODE] или лучше [JAVA] - это для кода типа Java.

Цитата Сообщение от PavelK_1381 Посмотреть сообщение
единственное что не нравится что получается создаю коллекцию и туда добавляю объект, а можно ли в комбо сразу добавить объект так что бы потом можно было аналогично вытаскивать значения полей объекта, что если к модели добавить интерфейс List и что бы комбо сам стал коллекцией?
C DataSource для ComboBox - зачем такие преобразования - еслив ResultSet из БД несколько полей, а надо их перегруппировать в объект с двумя полями - id, option.
0
0 / 0 / 0
Регистрация: 09.04.2023
Сообщений: 26
23.05.2023, 17:10  [ТС] 5
не совсем понял вас... имеете ввиду что можно было бы обойтись без DataSource? скажем считывать из RS значения полей и добавлять их в созданный объект, а объект в векторный массив, массив в свою очередь в комбо? так?
0
Matthias Ronald Gerard
149 / 209 / 25
Регистрация: 11.08.2022
Сообщений: 2,066
23.05.2023, 17:16 6
Извините, возможно неясно выразился.
Нужен или 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
Сообщений: 26
23.05.2023, 19:46  [ТС] 7
Да... именно это я и искал... попробовал ваш вариант, работает!!!! СПАСИБО!!!
0
23.05.2023, 19:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2023, 19:46
Помогаю со студенческими работами здесь

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

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

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

Заполнение одного ComboBox-а в зависимости от выбранного значения в другом ComboBox-е
Можно ли сделать так, чтобы если я выбирают первый пункт в первом ComboBox1, а во втором при...

Вставить текст ниже ComboBox после выбора, совершенного в ComboBox
В результате работы макроса, после выбора совершенного в ComboBox, программа выводит на экран...

Сравнивание текста в combobox-е и вывод определенных значений в другой combobox
Есть 2 combobox-a. В каждом берутся данные из текстового файла. Нужно при выборе одной строки в 1м...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru