Je développe un système de gestion des stocks et je travaille sur la dernière partie permettant aux utilisateurs de mettre à jour les commandes. Cette mise à jour nécessite que des articles soient ajoutés ou supprimés de la commande. Je travaille sur l'ajout de la pièce maintenant. J'ai testé une requête MySQL qui fonctionne dans Workbench :
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));
En Java, je sais que je dois créer un objet Item basé sur l'ID transmis ci-dessus. Voici 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; }
Voici le contrôleur :
@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; }
J'ai vu quelque chose de similaire ici mais je ne sais pas trop comment l'adapter. Je savais que j'étais sur le point de déclasser car j'envisageais d'utiliser la méthode utilisant les propriétés de l'objet ItemDAO.read(Long id)
方法,但我不知道如何设置 Item
dans la classe ItemDAO.
Nouveau dans le modèle DAO et JDBC, donc s'il y a déjà une réponse, je ne la trouve pas, je serais donc reconnaissant de pouvoir m'orienter dans la bonne direction.
Modifier :
Voici la méthode 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); }
Solution :
CommandeDAO :
Contrôleur de commande :
Il dispose de toutes les fonctionnalités nécessaires pour ajouter et supprimer des articles, ainsi que pour supprimer toute commande avec une quantité d'article de 0.