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中选定的员工
我想添加名称如下的IDI122 name
,并使用split方法提取ID,但我不想显示ID
有没有办法将包含员工ID的隐藏值与JComboBox中的每个姓名关联起来?- 创建包含两个字段的Employee对象李>
- 重写toString()方法以输出员工姓名李>
- 将Employee对象放在JComboBox中,将显示名称,但您可以将所选对象强制转换为Employee并拉出id
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);
}