Как вставить идентификатор записи вместо Varchar в мой MySql, используя JComboBox в JAVA Netbeans - PullRequest
0 голосов
/ 08 июня 2019

enter image description hereenter image description here

Привет

Я хотел бы попросить помощи относительно добавления записей с использованием JComboBox в базу данных MySql. Дело в том, что у меня есть несколько таблиц в моей базе данных, и большинство из них находятся в отношениях.

Пример:

Таблица Employee_Details, она имеет 3 внешних ключа, которые находятся в другой таблице, такой как Position, Department и Office_Location. Теперь у этих внешних ключей есть значения типа данных INT, теперь проблема в том, что если я выберу одно из заданного значения символа в поле со списком и нажму «Сохранить», это выдаст мне ошибку, поскольку оно явно не соответствует назначенному типу данных в Таблица базы данных employee_details.

Вопрос:

Как я могу выбрать любые заданные символьные значения внутри комбинированного списка, и когда я нажимаю кнопку добавления или вставки, он сохраняет идентификатор этого значения вместо переменного символа.

private void Position(){ // Position Combo Box

     try {
         String sqlPosition = "Select * From positions";
         pst = con.prepareStatement(sqlPosition);
         rs = pst.executeQuery();

         while(rs.next()){

             JCB_Position.addItem(rs.getString("Position"));


         }

     } catch (SQLException e) {
         JOptionPane.showMessageDialog(null, e);
     }
 }

 private boolean CheckInputs(){

     if(jTextFieldFname.getText() != null || jTextFieldLname.getText() !=null || JCB_Department.getSelectedItem() != null 
             || JCB_Location.getSelectedItem() != null
             || JCB_Location.getSelectedItem() != null
             || JCB_EmpStat.getSelectedItem() !=null
             )
     {
         return true;
     }
     return false;  
 }

private void jButtonAddEmpActionPerformed(java.awt.event.ActionEvent evt) {                                              

    int InsertToDB = JOptionPane.showConfirmDialog(null, "Do you want to save this entry?", "SAVE",JOptionPane.YES_NO_OPTION);

    if (InsertToDB == 0)
    {

        String Gender = null;

        if(JRB_Male.isSelected())
        {
            Gender = "Male";
        }
        else if(JRB_Female.isSelected())
        {
            Gender = "Female";
        }

        jTextFieldFname.getText();
        jTextFieldLname.getText();
        jTextFieldOfficeNumber.getText();
        jTextFieldMobNumber.getText();
        jTextFieldEmailAdd.getText();
        jTextAreaRemarks.getText();
        String Position = JCB_Position.getSelectedItem().toString();
        //String Dept = JCB_Department.getSelectedItem().toString();
        //String Loc = JCB_Location.getSelectedItem().toString();
        //String Status = JCB_EmpStat.getSelectedItem().toString();   

        if(CheckInputs() != false)
        {
            try {
                pst = con.prepareStatement("INSERT INTO employee_details (First_Name, Last_Name, Gender, "
                        + "Office_Number, Mobile_Number, Email_Address, Remarks)"
                        + "VALUES (?,?,?,?,?,?,?)");

                pst.setString(1, jTextFieldFname.getText());
                pst.setString(2, jTextFieldLname.getText());
                pst.setString(3, Gender);
               //pst.setInt(4, Position);
                //pst.setString(5, Dept);
                //pst.setString(6, Loc);
                //pst.setString(7, Status);
                pst.setString(4, jTextFieldOfficeNumber.getText());
                pst.setString(5, jTextFieldMobNumber.getText());
                pst.setString(6, jTextFieldEmailAdd.getText());
                pst.setString(7, jTextAreaRemarks.getText());

                pst.executeUpdate();
                JOptionPane.showMessageDialog(null, "Succesfully Saved");

            } catch (SQLException ex) {
                Logger.getLogger(Employee_Details.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        else{
        JOptionPane.showMessageDialog(null, "Check the mandatory fields");
        }
    }

}                          

1 Ответ

0 голосов
/ 08 июня 2019

В настоящее время вы добавляете строки в свой JComboBox, поэтому связь с идентификатором не сохраняется.

Вы можете создать класс-оболочку, например, такой:

public class PositionWrapper {
    private int id;
    private String position;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPosition() {
        return position;
    }

    public void setPosition(String position) {
        this.position = position;
    }

    @Override
    public String toString() {
        return position;
    }
}

и добавить его в свой JComboBoxнапример:

while(rs.next()){
    PositionWrapper position = new PositionWrapper();
    position.setId(rs.getInt("Position_ID"));
    position.setPosition(rs.getString("Position"));
    JCB_Position.addItem(position);
}

JComboBox будет использовать toString() метод PositionWrapper в качестве содержимого, но использование JCB_Position.getSelectedItem() теперь вернет PositionWrapper.

Сейчаспросто получите оттуда идентификатор:

pst.setInt(0, ((PositionWrapper)JCB_Position.getSelectedItem()).getId());

Если ваш JComboBox редактируемый, вам сначала нужно проверить тип возвращаемого объекта, иначе вы можете получить исключение.

Вам потребуетсянастройте тип вашего JComboBox на JComboBox<PositionWrapper>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...