是否可以使用SELECT * FROM table_name WHERE column_name ='value',其中'value'可能出现在多行中?

时间:2015-01-28 14:48:34

标签: sql jtable h2

我正在尝试创建一个屏幕,显示特定客户的购买历史记录。我的“销售”表包含“TicketNumber”,“CustomerID”,“InventoryNo”,“描述”,“成本”,“零售”,“IndividualSubTotal”,“IndividualTax”,“IndividualTotal”,“SaleSubTotal”,“SaleTax”等列,和“SaleTotal”。

出于此屏幕的目的,我只需要(现在)“TicketNumber”,“CustomerID”,“InventoryNo”,“Retail”,“IndividualTax”和“IndividualTotal”。

现在,我正在尝试通过客户的ID提取信息。我的最终目标是将票号放在表格中,但我只希望它出现在ONCE中。我想我能搞清楚这一点。但是现在,这就是我遇到的问题。

    try {
        Class.forName("org.h2.Driver");
        Connection connection = DriverManager.getConnection("jdbc:h2:./RetailApplicationDatabase;AUTO_SERVER=TRUE");

        String sql;
        Statement stmt;

        sql = "SELECT distinct TicketNumber FROM Sales WHERE CustomerID = '" + CustomerNoNumberLabel.getText() + "';";
        stmt = connection.createStatement();

        ResultSet results = stmt.executeQuery(sql);

        DefaultTableModel model = (DefaultTableModel) TicketNumberTable.getModel();
        String TicketNumber;

        while(results.next()) {
            TicketNumber = results.getString("TicketNumber");

            model.insertRow(TicketNumberTable.getRowCount(), new Object[] {TicketNumber});
        }
    } catch (SQLException | ClassNotFoundException ex) {
        Logger.getLogger(ViewHistoryDialog.class.getName()).log(Level.SEVERE, null, ex);
    }

如您所见,虽然有更多结果,但我想继续在表格中插入一行。 CustomerID将显示在客户拥有的许多不同的商品和票号中。

当我编译程序时,我没有在输出日志中出现错误,但我没有看到任何内容被放入表中。我认为这可能是我尝试做的事情的顺序,所以现在,我在这个对话框上有一个按钮,上面写着“加载”,当按下它时,上面的代码就会运行。

我的问题在哪里?为什么我没有看到任何被添加到表中的内容?

提前感谢您提供任何有用的回复。

编辑(2015年1月28日 - 美国夏令时上午8:03):销售已添加到数据库中的“销售”表中。假设客户购买了库存号1,2和3,他们是第一个进行购买的客户,因此票号为1.“销售”表中为每个库存号添加了三行,并且TicketNumber列在所有三行中的值都为“1”。然后我尝试检索此信息并将其显示在jTable中。我想在jTable TicketNumberTable中显示票号。但是我的ResultSet没有检索票号。

编辑(2015年1月28日 - 美国夏令时上午8:11):我更改了代码以为TicketNumber提取不同的值。但是,这不是我主要关注的问题,因为我仍在努力让我的ResultSet检索信息。

2 个答案:

答案 0 :(得分:1)

您的问题在仅插入一次票号时有点模糊。这对于给定的客户意味着什么?或者对所有客户?如果是后者,则应将其强制为TicketNumberTable上的唯一约束。

其次,您可以在一个语句中执行selectinsert。无需运行多个查询并进行循环。类似的东西:

INSERT INTO TicketNumberTable(TicketNumber)
    SELECT distinct TicketNumber
    FROM Sales
    WHERE CustomerID = '. . .';

或者也许:

INSERT INTO TicketNumberTable(TicketNumber)
    SELECT distinct TicketNumber
    FROM Sales
    WHERE TicketNumber NOT IN (SELECT TicketNumber FROM TicketNumberTable) AND
          CustomerID = '. . .';

答案 1 :(得分:1)

哇,我确定了这个问题......没有人能够看到它......我直接在H2控制台中做了一个SQL查询。当表格显示时,我注意到我的CustomerNo列包含一个" " (空格)之前的数字。这是因为我使用子字符串来提取客户编号,并且子字符串被一个字符(即空格)关闭。如果我没有深入研究它并开始分析,我就不会注意到它。

感谢所有帮助过我的人。小心。