Добавление заказа в Базу данных, и проверка на доступность

185
12 декабря 2018, 07:20

Направьте на путь истинный. Есть интернет-магазин. Есть корзина товаров (данные о корзине хранятся в сессии). Используется: Java, servlet, js, Mysql

Клиент набивает корзину и собирается оформить заказ. 1) Нужно узнать, возможно ли сформировать такой заказ, т.е выясняем хватит товаров на складе или нет (в БД существует таблица с товарами и полем "количество"). 2) Если товаров хватает то добавить заказ в БД (существует 2 связанные таблицы: заказ и состав заказа). 3) Как правильно добавить запись в таблицу "Order" и "OrderList". В первой поля: id, user_id, status, date Во второй: order_id, product_id, price (тут может быть несколько записей для одного заказа).

Как правильно и красиво проверить возможность сформировать заказ?

Мои мысли: сделать запрос select * from product. Ответ запихнуть в List<Product> products. И далее через цикл ищем, если товаров хватает, то делаем следующий запрос, если нет, то возвращаем ответ о нехватке товаров на складе. По второму вопросу: Я думал делать запросы в цикле. Или можно как-то сделать через хранимые процедуры?

for (OrderList pr : orderlist){
 statement2.setInt(1, pr.getProduct_id());
 statement2.setInt(2, pr.getAmount());
 statement2.setInt(3, pr.getPrice());
 statement2.executeUpdate();
}

UPDATE:

Запрос на добавление заказа:

INSERT INTO `orders` (`users_ID`, `status`, `date`) VALUES ('2', 'PROCESSED', '2018-09-04 04:36:00');

Далее идут запросы:

INSERT INTO `orders_list` (`orders_ID`, `products_ID`, `amount`, `price`) VALUES ('42', '2', '13', '1500'); 
INSERT INTO `orders_list` (`orders_ID`, `products_ID`, `amount`, `price`) VALUES ('42', '5', '8', '2500'); 
INSERT INTO `orders_list` (`orders_ID`, `products_ID`, `amount`, `price`) VALUES ('42', '7', '2', '1000'); 
INSERT INTO `orders_list` (`orders_ID`, `products_ID`, `amount`, `price`) VALUES ('42', '21', '1', '5000');

Где orders_ID, это автоинкрементный ID главной таблицы

Answer 1
1. START TRANSACTION
2. итератором бежим по продуктам в корзине: 
2.1. обновляем записи в БД: 
update product set amount = amount - 1 where id=? and amount > 0
(здесь если результат executeUpdate()==0 то делаем break и ROLLBACK TRANSACTION)
2.2 добавляем записи в orders и orders_list
3. COMMIT TRANSACTION
READ ALSO
как поменять varchar to text mysql

как поменять varchar to text mysql

Не могу нигде найтиКак поменять в базе тип строки с varchar на text ?

217
MySQL запрос на обьединение

MySQL запрос на обьединение

У меня есть две таблицы в одной собрано количество лайков по фотографии, а во второй по той же фото кол-во комментариевНу по разным фоткам...

278
Оибка mysql ERROR 1045 (28000): Access denied for user

Оибка mysql ERROR 1045 (28000): Access denied for user

Даже когда пытаюсь посмотреть версию mysql - mysql -v Выходит ошибка:

218
Нажать(утопить) кнопку при нажатии на нее Javascript

Нажать(утопить) кнопку при нажатии на нее Javascript

Прошу прощения за, возможно, простой вопросКак зажать кнопку используя обработчик событий onclick(без использования JQuery):

214