【问题标题】:How to compare three combobox and show result in textbox or label?如何比较三个组合框并在文本框或标签中显示结果?
【发布时间】:2015-10-04 13:49:33
【问题描述】:

我正在建立库存管理系统大学项目。图为股票报告。 我有 3 个组合框和一个结果文本框。问题是我不知道如何比较 3 个组合框并计算库存。例如,当我选择 Model: FZ, cc:153 and color : Red 时,Total Stock 中的结果应该可以显示在 Total stock 文本框中。

 try
    {
        String searchmodel = cmbModelSearch.getSelectedItem().toString();
        ps=DbConnection.cn.prepareStatement("SELECT COUNT(model)FROM stock WHERE model=?");
        ps.setString(1, searchmodel);
        ResultSet rs=ps.executeQuery();

        while(rs.next())
        {
            lblCountResult.setText(rs.getString("count(model)"));

        }
    }
    catch (Exception ex)
    {

    }

【问题讨论】:

  • 您能否发布一些代码,以便我们了解您在做什么?
  • 我使用以下代码来计算自行车的型号,例如 (Enticer:3)。该代码将计算诱人摩托车的可用库存。但我也需要它来与 CC 和 Color 进行比较
  • 不在 cmets 中...对您的帖子进行编辑,这非常不清楚
  • 请不要在 cmets 中显示代码,因为它会丢失格式使其无法读取。相反,请将其显示为对您的问题的编辑,并请显示更多。您是在询问 JComboBox 的使用——所以显示该代码对您来说是有意义的,不是吗?
  • 好吧,您应该只将另外 2 个组合框值添加到 sql 查询中吗?这有什么困难?

标签: java mysql swing jdbc combobox


【解决方案1】:

这样的东西应该不错:

当然我不知道你的项目和数据库中的实际名称,所以我只是猜测它们。

String model = cmbModelSearch.getSelectedItem().toString();
String cc = cmbCCSearch.getSelectedItem().toString();
String color = cmbColorSearch.getSelectedItem().toString();
ps=DbConnection.cn.prepareStatement("SELECT COUNT(Model) FROM stock WHERE model = ? AND Engine_Capacity = ? AND Color = ?");
ps.setString(1, model);
ps.setString(2, cc);
ps.setString(3, color);

【讨论】:

  • 我会在数据库中添加更多的模型、cc、颜色,然后再试一次
  • @DipeshShrestha 此查询基于猜测您应该使用的查询是 SELECT COUNT(Model) FROM stock WHERE model = ? AND Engine_Capacity = ? AND Color = ? 用于您的代码
【解决方案2】:

您要做的只是将组合框的选择映射到 MySQL 查询(我想这就是您添加标签的原因)。

这比较简单。您只需要在组合框中添加一个 actionListener。每次有人更改所选选项时(实际上是在 3 个组合框中的任何一个中),您都会更改一个字符串(将在查询中使用)

假设你有 3 个字符串:

String model;
String cc;
String color;

每次有人更改 3 个组合框中的任何一个时,您都会将相应的字符串设置为新选择的选项。请注意,如果它们没有被选中,就像在屏幕截图中一样,您必须将字符串设置为 null 或空。我更喜欢空字符串,因为它们可以让你免于遇到一些 NPE。

现在您已经根据所选选项设置了字符串,您必须根据该信息创建一个 MySQL 查询。这很简单 - 这是一个具有多个(可能是一个)条件的选择查询。

它看起来像:

SELECT model, cc, color
FROM motorbikes
WHERE model=this.model AND cc=this.cc AND color=this.color;

但是在构建 WHERE 语句时您必须灵活 - 如果您的任何一个字符串为 null 或为空,则您必须将其包含在查询中。这意味着上述查询的前两行将成为您的 base - 它们不会改变,我们将在这些基础上进行构建。要检查您是否应该包含任何条件(如果它们已从组合框中设置),您可以执行以下操作:

boolean querySet = false;
String query = "SELECT model, cc, color FROM motorbikes ";
if(!model.isEmpty() || !cc.isEmpty() || !color.isEmpty()) {
    query.append("WHERE ");
    if(!model.isEmpty()) {
        query.append("model=" + this.model);
        querySet = true;
    }
    if(!cc.isEmpty()) {
        if(querySet){
            query.append("AND ");
        }
        query.append("cc=" + this.cc);
        querySet = true;
    }
    if(!color.isEmpty()) {
        if(querySet) {
            query.append("AND ");
        }
        query.append("color=" + this.color);
    }
}

在此之后,您应该只发送/接收查询就完成了。作为最后一步,您似乎只对此查询返回的摩托车数量感兴趣(或者您可能想添加一个额外的“AND currentStorage > 0)

【讨论】:

  • 谢谢,我在这里学到了一些知识,现在就试试这个
  • 这实际上是一个糟糕的选择。最好使用PreparedStatement
  • 有一组有限的可用选项。他自己控制组合框中的标签。没有 SQL 注入的危险,因为用户不提供直接输入到查询中。
  • 如果您建议 OP 使用 Statement 而不是 PreparedStatement,您还应该在帖子中说明 Statement 的缺点。
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多