Как ограничить конкретную строку, удаляемую в MySQL

0

Я использую jComboBox для выбора поставщика из таблицы, поэтому я создал строку id -1 в таблице для "ни одного" выбранного поставщика.

-1 строка также отображается для пользователя, где я получил все записи в jTable.

Я не хочу, чтобы пользователь мог удалить эту строку случайно или сознательно.

Так можно мне что-то подобное?
Я использую MySQL и Java.

String comName = (String) jSupplrsComboBox.getSelectedItem();

            Suppliers suppliers = manager.searchSuppCompny(comName);
            if (comName.equals("none")) {
                receivings.getSuppliers().setId(-1);
                receivings.setSuppliers(suppliers);
            }
            receivings.setSuppliers(suppliers);  

Получил Suppliers в jComboBox и просто вручную добавил текст "нет", чтобы он не совпадал с таблицей Suppliers.

  • 0
    Я не думаю, что в базе данных должна присутствовать вещь «нет поставщика».
  • 1
    Чтобы расширить ответ @f1sh f1sh - наличие фиктивной записи в БД просто вызывает проблемы - вам придется не забывать исключать ее всякий раз, когда вы пишете запрос с использованием этой таблицы, что сделает ваш код более сложным, ошибка склонны и потенциально медленнее. Просто добавьте специальное значение в поле со списком, когда оно будет создано.
Теги:

2 ответа

0
Лучший ответ

Ну, я попробовал себя, и где я беру записи, я изменил код:

DefaultTableModel suppliersModel = (DefaultTableModel) jSuppliersTable.getModel();
for(Suppliers suppliers : manager.allSuppliers()) {
    suppliersModel.addRow(new Object[]{suppliers.getId()});

    int id = (Integer) suppliersModel.getValueAt(0, 0);
    if(id == -1) {
        suppliersModel.removeRow(0);
    }   

Это извлекает записи после первой строки с id -1 в таблице базы данных.
Tahnks.

0

Я не уверен, чего именно вы пытаетесь достичь, но если вы используете JComboBox, я полагаю, что вы фильтруете свою базу данных по поставщику, указанному выбором comboBox. Это также означает, что ваша модель comboBox должна быть заполнена записями, которые существуют в вашей базе данных.

Это быстрый способ установить строки в ComboBox из Enum, передача записей из базы данных должна работать аналогичным образом, но, возможно, необходимо устранить дублирование.

jSupplrsComboBox.setModel(new DefaultComboBoxModel<>(SupplierId.values()));

По ссылке Java - флажки в JComboBox, ответ Джонатана Фейнберга мог бы лучше подходить для более чем одного фильтра.

Что касается MYSQL, я предполагаю, что у вас есть доступ для внесения изменений, может быть лучше, если вы добавите дополнительное поле, скажем, isValid, чтобы указать, является ли указанная запись действительной или нет. В этом случае вы можете отфильтровать jSupplrsComboBox.getSelectedItem() с дополнительным WHERE isValid = 1. Но ваш вопрос был больше ориентирован на Java, чем на MYSQL, поэтому я не буду об этом больше говорить. Проверьте MySQL Boolean Question и связанные ссылки для получения дополнительной информации об этом.

  • 0
    Затем, возможно, вторая половина моего ответа, где я упомянул добавление столбца isValid в таблицу базы данных. Иначе я не до конца понимаю, о чем ты спрашиваешь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню