В настоящее время я создаю корзину для покупок, и я хочу обновить товарный запас в моей базе данных для каждого товара в моей корзине после оформления заказа.
Товары хранятся в Session Scope как список Java Beans. Это мой сервлет проверки.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
final HttpSession session = request.getSession();
@SuppressWarnings("unchecked")
List<CartItems> itemsInWc = (List<CartItems>) session.getAttribute("Cart");
for (CartItems item : itemsInWc) {
updateBestand(item.getInCart(), item.getSize(), item.getId(), item.getKat(), item.getName(), item.getBestand());
}
}
Сначала я получаю список с элементами, затем перебираю элемент eatch и обновляю запас с помощью метода updateBestand.
public void updateBestand(int inCart, String size, int id, String kategorie, String name, int bestand)
throws ServletException, IOException {
int updateAnzal = bestand - inCart;
try (Connection con = ds.getConnection();
PreparedStatement pstmt = con.prepareStatement("UPDATE " + kategorie + " SET " + size + " =?"
+ " WHERE artikelName = ? and id = ?")) {
pstmt.setInt(1, updateAnzal);
pstmt.setString(2, name);
pstmt.setInt(3, id);
pstmt.executeUpdate();
} catch (Exception ex) {
throw new ServletException(ex.getMessage());
}
}
Но каждый раз, когда я вызываю свой checkOut-Servlet, он просто обновляет запас первого элемента в списке, а затем игнорирует ConcurrentModificationException.
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at Servlets.UpdateBestandServlet.doGet(UpdateBestandServlet.java:40)