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

ComboBox и БД

22.05.2023, 13:36. Показов 1440. Ответов 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
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,713
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
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,713
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
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,713
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru