我正在开发库存管理系统,我正在研究允许用户更新订单的最后一部分。此更新需要在订单中添加或删除商品。我现在正在研究添加部分。我已经测试过可以在 Workbench 中运行的 MySQL 查询:
INSERT INTO order_items (item_quantity, fk_item_id, fk_order_id) VALUES (1, (SELECT item_id FROM items WHERE item_id= 1), (SELECT order_id FROM orders WHERE order_id=2));
在 Java 中,我知道需要根据上面传入的 ID 创建一个 Item 对象。 这是 OrderDAO:
public Order addItem(Order order) { ItemDAO itemDao = new ItemDAO(); try (Connection connection = DBUtils.getInstance().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO order_items (item_quantity, fk_item_id, fk_order_id) VALUES (?, (SELECT item_id FROM items WHERE item_id = ?), (SELECT order_id FROM orders WHERE order_id = ?));");) { statement.setInt(1, order.getItemQuantity()); statement.setLong(2, order.getItemId()); itemDao.read(order.getItemId()); statement.setLong(3, order.getOrderId()); statement.executeUpdate(); System.out.println(order); return read(order.getOrderId()); } catch (Exception e) { LOGGER.debug(e); LOGGER.error(e.getMessage()); } return null; }
这是控制器:
@Override public Order update() { LOGGER.info("Please enter the id of the order you would like to update"); Long id = utils.getLong(); // LOGGER.info("Would you like to add or delete an item from an order"); LOGGER.info("Please enter the ID of the item you wish to add"); Long itemId = utils.getLong(); LOGGER.info("Please enter the quantity of the item to add"); int quantity = utils.getInt(); Item item = new Item(itemId); System.out.println(item); Order order = orderDAO.addItem(new Order(item, quantity, id)); LOGGER.info("Order Updated\n"); return order; }
我在这里看到了类似的东西,但不太确定如何适应它。我知道我即将降价,因为我考虑使用 ItemDAO 类中的 ItemDAO.read(Long id)
方法,但我不知道如何设置 Item
对象的属性使用该方法。
刚接触 DAO 模型和 JDBC,所以如果已经有答案,我找不到它,所以如果我能找到正确的方向,我将不胜感激。
编辑:
这是 ItemDAO read()
方法和 modelFromResults()
方法:
@Override public Item read(Long id) { try (Connection connection = DBUtils.getInstance().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM items WHERE item_id = ?");) { statement.setLong(1, id); try (ResultSet resultSet = statement.executeQuery();) { resultSet.next(); return modelFromResultSet(resultSet); } } catch (Exception e) { LOGGER.debug(e); LOGGER.error(e.getMessage()); } return null;
@Override public Item modelFromResultSet(ResultSet resultSet) throws SQLException { Long itemID = resultSet.getLong("item_id"); String itemName = resultSet.getString("item_name"); double itemCost = resultSet.getDouble("item_cost"); return new Item(itemID, itemName, itemCost); }
解决方案:
OrderDAO:
订单控制器:
它具有添加商品和删除商品的完整功能,以及删除商品数量为 0 的任何订单。