有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个名为Client的表,其中clientID和clientName作为字段,我想在组合框中显示这两个字段,但我只想在单击add按钮后将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) 个答案

  1. # 1 楼答案

    创建一个表示您的客户机的模型类并重写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<>();
    

    选择组合框项目后,您现在可以获得整个对象。你想用那个东西做什么都行。获取id、姓名或其他信息

    另外,如果所有这些代码都是由NetBeans GUI builder生成的,我表示哀悼

  2. # 2 楼答案

    一个快速修复方法是拆分结果字符串并获取第一个值

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

    编辑:布兰尼斯拉夫的答案要好得多

  3. # 3 楼答案

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