如何在 JAVA Netbeans 中使用 JComboBox 将记录 ID 而不是 Varchar 插入到我的 MySql

How to insert record ID instead of Varchar to my MySql using JComboBox in JAVA Netbeans

嗨,

我想寻求有关使用 JComboBox 添加条目到 MySql 数据库的帮助。问题是,我的数据库中有多个 table,其中大部分都在关系中。

示例:

Employee_Details table,它有 3 个来自另一个 table 的外键,例如 Position、Department 和 Office_Location。现在这些外键的数据类型值为 INT,现在的问题是,如果我 select 组合框中给定的字符值之一并点击保存,它会给我一个错误,因为它显然与分配的不匹配employee_details 数据库中的数据类型 table.

问题:

如何 select 组合框中的任何给定字符值,当我单击添加或插入按钮时,它会保存该值的 ID 而不是可变字符。

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");
        }
    }

}                          

目前您正在向 JComboBox 添加字符串,因此与 id 的关联没有保留。

您可以像这样创建包装器 class:

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 将使用 PositionWrappertoString() 方法作为内容,但使用 JCB_Position.getSelectedItem() 现在将 return 变成 PositionWrapper.

现在只需从那里获取 ID:

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

如果您的 JComboBox 是可编辑的,那么您需要先检查 returned 对象的类型,否则您可能会收到异常。

您需要将 JComboBox 的类型调整为 JComboBox<PositionWrapper>