我正在尝试创建一个屏幕,显示特定客户的购买历史记录。我的“销售”表包含“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检索信息。
答案 0 :(得分:1)
您的问题在仅插入一次票号时有点模糊。这对于给定的客户意味着什么?或者对所有客户?如果是后者,则应将其强制为TicketNumberTable
上的唯一约束。
其次,您可以在一个语句中执行select
和insert
。无需运行多个查询并进行循环。类似的东西:
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)
感谢所有帮助过我的人。小心。