Java JComboBox帮助从数据库中删除数据

Java JComboBox帮助从数据库中删除数据,java,database,jcombobox,Java,Database,Jcombobox,我在数据库employee中有一个表,由ID和NameLastName两列组成 我来到这里是为了将第二列中的数据添加到JComboBox中,就像快照中的一样 现在,如何从DB中删除JComboBox中选定的员工 我想添加名称如下的IDI122 name,并使用split方法提取ID,但我不想显示ID 有没有办法将包含员工ID的隐藏值与JComboBox中的每个姓名关联起来? 创建包含两个字段的Employee对象 重写toString()方法以输出员工姓名 将Employee对象放在JComb

我在数据库
employee
中有一个表,由ID和NameLastName两列组成

我来到这里是为了将第二列中的数据添加到JComboBox中,就像快照中的一样

现在,如何从DB中删除JComboBox中选定的员工

我想添加名称如下的ID
I122 name
,并使用split方法提取ID,但我不想显示ID

有没有办法将包含员工ID的隐藏值与JComboBox中的每个姓名关联起来?

  • 创建包含两个字段的Employee对象
  • 重写toString()方法以输出员工姓名
  • 将Employee对象放在JComboBox中,将显示名称,但您可以将所选对象强制转换为Employee并拉出id
您可以尝试以下方法:

使用字段名和id创建Employee类,然后创建一个实现
ListCellRenderer
并扩展
JLabel
的类。将此类作为渲染器添加到JComboBox。现在,您可以在JLabel中将名称设置为文本。现在,当您访问comboBox的元素时,它将返回JLabel,您可以从JLabel中设置的位置获得名称作为可见值,id作为隐藏值

JComboBox的方法
getSelectedItem()
返回一个对象,该对象可以强制转换为组合框中放置的任何对象。要获取用于渲染项目的组件,请调用
getRenderer()

注意:-您可以使用其他组件,然后使用JLabel


演示:-

public class ComboRenderer extends JLabel implements ListCellRenderer{
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus) {

        if(value != null){
            Employee emp = (Employee) value;
            setText(emp.getName());
            return this;
        }
        return null;
    }

}
现在,在要将项添加到comboBox的位置使用
combo.addItem(empObject)。它将在组合框中显示员工的姓名,当您执行
getSelectedItem()
操作时,它将返回员工对象,您将获得属于该emp对象的姓名和id

我不想出示身份证

这个问题已经得到了两个很好的答案,但我想添加第三个答案,如果只是为了解决是否显示ID的问题(这不是问题的一部分,但应该是)

截屏 你打算解雇哪个约翰·史密斯

SackEmployee.java 例如I/O
下面是删除数据库中整行的简单代码

    try{
      String str;
      con = DriverManager.getConnection("jdbc:mysql://:3306/database","user","password");
      stat = con.createStatement();
      ResultSet rs = stat.executeQuery("SELECT column_name FROM table_name where column_name = '"+jComboBox1.getSelectedItem().toString()+"';");
      while(rs.next()){
         Str = rs.getString(column_name);
      }
      stat.executeUpdate("DELETE FROM table_name where column_name = +"str"+");
    }
    rs.close();
    stat.close();
    con.close();
    catch(Exception e){
      System.out.println(e);
    }

公共字符串toString(){return name;}只是一个简单的双变量Employee对象。@Andrew:我试着用一个例子来解释这个问题。这是正确的吗?就没有“解雇”你而言,这是“提前”的吗?;)为了两个!当然答案是肯定的!;)
prompt>java SackEmployee
Fire 'ID-9823: Ali Ben Messaoud' now?
Proceed: false

prompt>java SackEmployee
Fire 'ID-1247: John Smith' now?
Proceed: true

prompt>java SackEmployee
Fire 'ID-4385: John Smith' now?
Proceed: false

prompt>
    try{
      String str;
      con = DriverManager.getConnection("jdbc:mysql://:3306/database","user","password");
      stat = con.createStatement();
      ResultSet rs = stat.executeQuery("SELECT column_name FROM table_name where column_name = '"+jComboBox1.getSelectedItem().toString()+"';");
      while(rs.next()){
         Str = rs.getString(column_name);
      }
      stat.executeUpdate("DELETE FROM table_name where column_name = +"str"+");
    }
    rs.close();
    stat.close();
    con.close();
    catch(Exception e){
      System.out.println(e);
    }