【问题标题】:Get combobox value from database从数据库中获取组合框值
【发布时间】:2020-10-13 03:56:55
【问题描述】:

我想从数据库中获取ComboBox 值。我正在尝试以下代码,它不会返回任何错误,但不会返回添加到 ComboBox 的项目。

@FXML
private ComboBox<List> laptopos_combo;
public void filloscombo() throws SQLException
{
    String connectionUrl = "jdbc:sqlserver://WIN\\SQLEXPRESS:1433;database=itinventory;" + 
    "user=sa;"+ "password=Varpal@1234;";
    Connection connect= DriverManager.getConnection(connectionUrl);
    String query = "Select * from operatingsystem";
    
    PreparedStatement pst = connect.prepareStatement(query);
    // log.conn().prepareStatement(query);
    ResultSet os = pst.executeQuery();
    
    while(os.next())
    {
        ((List<String>) laptopos_combo).add(os.getString("os"));
    }
}

【问题讨论】:

  • minimal reproducible example 请 - 顺便说一句:代码 sn-p 看起来完全错误(为什么你有一个列表作为数据项?当查询返回一个简单的字符串时?并将组合框类型转换为列表?) .. 请确保您了解如何使用组合框(有大量教程/示例可供学习)。并在公共交流中坚持 Java 命名约定 :)

标签: java sql sql-server javafx jdbc


【解决方案1】:
public ArrayList<Object> selectAllObjects() {
        ArrayList<Object> list = new ArrayList<>();
        try {
             String connectionUrl 
             ="jdbc:sqlserver://WIN\\SQLEXPRESS:1433;database=itinventory;" + 
             "user=sa;"+ "password=Varpal@1234;";
             Connection connect= DriverManager.getConnection(connectionUrl);
             Statement stmt = connect.createStatement();
             ResultSet result = stmt.executeQuery("SELECT QUERY");
             while (result.next()) {
                Object obj = new Object();
                obj.setId(result.getInt(1));
                //setters
                list.add(payment);
            }
        } catch (SQLException se) {
            se.printStackTrace();
        } finally {
            if (connect != null) {
                try {
                    connect.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
        }
        return list;
    }

然后您可以调用该函数,将其保存到另一个 Arraylist 并像这样设置它:

comboBox.setItems(arraylist);
comboB.setValue(arraylist.get(0));

【讨论】:

  • 在代码 1 中显示一些错误。 obj.setId(result.getInt(1));错误:类型对象 2 的方法 setId(int) 无法识别。支付参数在 list.add(payment) 中的作用;我在哪里创建它 3. connect 是 try 块中的局部变量,在 finally 块中不起作用。当我在外面声明它时,它不起作用
  • @SukhmanjitSingh 你应该用你的模型对象替换对象......这是示例代码。 list.add(payment) 应该是 list.add(obj) 是复制粘贴错误
【解决方案2】:

我认为您需要将 ComboBox 的项目类型从 List 更改为 String,因为您想向 ComboBox 添加一个字符串值,试试这个:

@FXML
private ComboBox<String> laptopos_combo;
public void filloscombo() throws SQLException {
    String connectionUrl ="jdbc:sqlserver://WIN\\SQLEXPRESS:1433;database=itinventory;" +
            "user=sa;"+ "password=Varpal@1234;";
    Connection connect= DriverManager.getConnection(connectionUrl);
    String query="Select * from operatingsystem";

    PreparedStatement pst = connect.prepareStatement(query);
    ResultSet os = pst.executeQuery();
    laptopos_combo.getItems().clear(); // Add this line to remove all items before you add the database one
    while(os.next()) {
        laptopos_combo.getItems().add(os.getString("os"));
    }
}

【讨论】:

    【解决方案3】:

    我尝试了下面的代码,但只显示第一个值。我通过实现可初始化的接口来做到这一点

    try
    {
        String connectionUrl = "jdbc:sqlserver://WIN\\SQLEXPRESS:1433;database=itinventory;" + 
            "user=sa;"+ "password=Varpal@1234;";
        Connection connect= DriverManager.getConnection(connectionUrl);
        String query="Select * from operatingsystem";
        
        PreparedStatement pst = connect.prepareStatement(query);
                // log.conn().prepareStatement(query);
        ResultSet os = pst.executeQuery();
        
        while(os.next())
        {
            ObservableList<String> value = 
      FXCollections.observableArrayList(os.getString("os"));
             System.out.println(value);
            laptopos_combo.setItems(value);
        }
    }                                                                                                   
    

    【讨论】:

    • 请不要在您的问题中添加详细信息作为答案 - 而是编辑您的问题以包含它们:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多