【问题标题】:Fill jTextField with records when selecting from jComboBox (Java database)从 jComboBox(Java 数据库)中选择时用记录填充 jTextField
【发布时间】:2015-12-24 17:05:47
【问题描述】:

当从 jComboBox 中选择项目时,如何将记录放入 jTextField?例如,我正在制作一个航空公司预订系统,并且我有一个包含可用航班的组合框。下面是带有指定信息的文本字段,如出发日期、出发时间、到达日期等。我该如何制作,以便当用户从组合框中选择一个项目时,(例如航班名称是 CX9005)相应的信息来自同一行的显示在文本字段中? (例如出发日期为 2015 年 11 月 12 日)

编辑:

所以我尝试用 ff.代码,但出现语法错误和 ResultSet 未打开错误。

private void combo_FlightItemStateChanged(java.awt.event.ItemEvent evt) {                                              

    try{
    flightID = combo_Flight.getSelectedItem().toString();
    String flightName = combo_Flight.getSelectedItem().toString();  
    String query = "Select * from ACCOUNTS where flightName = \'"+flightName+"\';";

    rs = stmt.executeQuery(query);
    }
    catch(SQLException err){
        JOptionPane.showMessageDialog(UserModule.this, err.getMessage());
    }
}                  

另外,如果这很重要,我会使用此功能连接到我的数据库。

public void DoConnect() {
    try{
        String host = "jdbc:derby://localhost:1527/UserAccounts";
        String uName = "Bryan";
        String uPass = "Cruz";
        con = DriverManager.getConnection(host, uName, uPass);

        stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_UPDATABLE);
        String sql = "SELECT * FROM ACCOUNTS";
        rs = stmt.executeQuery(sql);
    }catch(SQLException err){
        JOptionPane.showMessageDialog(Connect.this, err.getMessage());
    }
}

另外,我可能对我的原始帖子不太清楚。我想这样当用户从组合框中选择一个航班时,该航班的所有详细信息都会显示在相应的文本字段中。 (例如出发日期、出发时间、目的地等)我对如何进行这项工作感到困惑,因此非常感谢您的帮助!

【问题讨论】:

    标签: java mysql swing


    【解决方案1】:

    您可以使用getSelectedItem()getSelectedValue()comboBox 获取文本。

    然后您可以创建一个MySQL 查询,例如:

          String flightName = yourComboBox.getSelectedItem().toString();  
          String query= "Select * from yourTable where flightName = \'"+flightName+"\';"; 
    

    然后你可以使用executeQuery()执行这个查询

    现在是所有testfields中设置结果的部分

    首先将结果存储在一个ResultSet对象中

          rs = stmt.executeQuery(query);
          rs.next();
    

    现在你在对象 rs 中得到了结果

    使用 rs.getString(columnNumber) 从结果中获取记录

    例如。

    String departureDate = rs.getString(4);
    // assuming the column number is 4
    

    执行此操作以获取所有必需的字符串。 并使用setText() 方法将它们设置在受尊重的列中

    【讨论】:

    • 您好,感谢您花时间回答。我在操作中添加了更多细节。
    • 那里看到添加的部分。那必须解决你的问题。我想你错过了 rs.next();声明
    【解决方案2】:
    flightID = combo_Flight.getSelectedItem().toString();
    String flightName = combo_Flight.getSelectedItem().toString();  
    

    以上两种说法的意义何在?您不能从同一个组合框中获取两个值。你要么得到 flightID 要么得到 flightName。

    String query = "Select * from ACCOUNTS where flightName = \'"+flightName+"\';";
    

    但我遇到了语法错误

    不要尝试手动构建 SQL 字符串。相反,您可以使用 PreparedStatement。它将确保使用正确的分隔符,因此您只需专注于 SQL 语句:

    String flightName = combo_Flight.getSelectedItem().toString();  
    
    String query = "Select * from ACCOUNTS where flightName = ?";
    PreparedStatement stmt = connection.prepareStatement(query);
    stmt.setString( 1, flightName );
    
    ResultSet rs = stmt.executeQuery();
    

    因此,您将需要访问您在 doConnect() 方法中建立的 Connection 对象。请注意,方法名称不应以大写字符开头。

    另外,我认为数据库列名的标准是将列的单词大写,因此您应该使用“FlightName”而不是“flightName”作为列名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2012-07-22
      • 2018-09-11
      • 2020-03-15
      相关资源
      最近更新 更多