如何在jComboBox中显示多个字段,但只在数据库中插入一个字段?

时间:2017-03-10 15:14:56

标签: java mysql

我有一个名为Client的表,其中clientID和clientName作为字段,我想在组合框中显示两个字段,但我只想在单击添加按钮后将clientID插入到我的另一个表中。

我有这个方法来填充我的组合框

private void fillClient(){
Connection con = getConnection();
String sql = "Select clientID, clientfname from client";

    try {
        pst=con.prepareStatement(sql);
        optset = pst.executeQuery();
        while (optset.next()){
            String id = optset.getString("clientID");
            String nme = optset.getString("clientfname");
            String cmb = (id+"-"+nme);
            clientCmb.addItem(cmb);
        }
    } catch (SQLException ex) {
        Logger.getLogger(Reservation.class.getName()).log(Level.SEVERE, null, ex);
    }}

问题是,插入的数据是组合字符串。

以下是我将所选项目插入数据库的方法。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Connection con = getConnection();
        String client = (String) clientCmb.getSelectedItem();
  String driver = (String) driverCmb.getSelectedItem();
  String van = (String) vanCmb.getSelectedItem();

  String sql = "Insert into reservation (clientID,van,driverID) values('"+client+"','"+driver+"','"+van+"')";

  try {
           Statement stmt = con.createStatement();
           stmt.executeUpdate(sql);
           JOptionPane.showMessageDialog(this, "Saved");
        } catch (SQLException ex) {
            Logger.getLogger(Reservation.class.getName()).log(Level.SEVERE, null, ex);
        }



    }    

3 个答案:

答案 0 :(得分:2)

创建一个代表客户端的模型类并覆盖toString

public class Client {
    private int id;
    private String firstName;
    private String lastName;

    // Getters and setters

    public String toString() {
        return firstName + " " + lastName;
    }
}

组合框项目中的文本将根据toString方法显示。将此模型类设置为JComboBox的类型参数。

JComboBox<Client> comboBox = new JComboBox<>();

选择组合框项目后,您现在可以获得整个对象。用这个对象做你想做的事。获得身份证,姓名或其他。

P.S。如果所有代码都是由NetBeans GUI构建器生成的,那么我表示哀悼。

答案 1 :(得分:1)

快速解决方法是拆分结果字符串并获取第一个值。

String[] parts = string.split("-");
String id = parts[0];

编辑:Branislav的回答更好。

答案 2 :(得分:1)

String client = (String) clientCmb.getSelectedItem();之后 这样做

    String[] clientDetails = client.split("-");
    String clientID = clientDetails[0];
    String driver = (String) driverCmb.getSelectedItem();
  String van = (String) vanCmb.getSelectedItem();

  String sql = "Insert into reservation (clientID,van,driverID) values('"+clientID+"','"+driver+"','"+van+"')";

  try {
           Statement stmt = con.createStatement();
           stmt.executeUpdate(sql);
           JOptionPane.showMessageDialog(this, "Saved");
        } catch (SQLException ex) {
            Logger.getLogger(Reservation.class.getName()).log(Level.SEVERE, null, ex);
        }



    }