Instt 0 Опубликовано 14 января, 2021 Как реализовать запрос в бд в коде ивента, чтобы по окончанию ивента удалялись ивентовые итемы? Сам запрос вроде знаю какой (DELETE FROM items WHERE item_id = ITEM_ID) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Rolo 279 Опубликовано 16 января, 2021 (изменено) Добавить импорты, и по окончанию ивента что-то похожее, переделанное под Ваш скрипт: Connect con = null; PreparedStatement st = null; try { con = L2DatabaseFactory.get(); st = con.prepareStatement("DELETE FROM pets WHERE item_obj_id=?"); st.setInt(1, item.getObjectId()); st.execute(); } catch (Exception e) { _log.log(Level.WARNING, "could not delete pet objectid:", e); } finally { Close.CS(con, st); } Изменено 16 января, 2021 пользователем Rolo Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 16 января, 2021 Зачем? В l2item делаем переменную eventItem, к ней геттер и сеттер. При выдачи итемов в скрипте евента item.setEventItem(true) Дальше везде где нужны какие либо проверки item.getEventItem() 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 16 января, 2021 В 15.01.2021 в 00:04, Instt сказал: Как реализовать запрос в бд в коде ивента, чтобы по окончанию ивента удалялись ивентовые итемы? Сам запрос вроде знаю какой (DELETE FROM items WHERE item_id = ITEM_ID) + перед этим по игрокам в в онлайне пробежаться, так же удалив у всех нужные предметы. так же как вариант можно просто каким либо способом запланировать выполнение определенных действий с бд при запуске сервера. Спойлер 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 16 января, 2021 2 часа назад, Gaikotsu сказал: + перед этим по игрокам в в онлайне пробежаться, так же удалив у всех нужные предметы. так же как вариант можно просто каким либо способом запланировать выполнение определенных действий с бд при запуске сервера. у меня к примеру так сделано (Показать контент) удаляешь сразу пачками или через итерацию отдельными запросами? Я в hibernate обычно пачками видимо в чистой java придется писать код самостоятельно Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Evolution 243 Опубликовано 16 января, 2021 3 часа назад, gawric сказал: удаляешь сразу пачками или через итерацию отдельными запросами? Я в hibernate обычно пачками видимо в чистой java придется писать код самостоятельно в чистой java есть batch как и в хибернейте Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 16 января, 2021 (изменено) 5 часов назад, gawric сказал: удаляешь сразу пачками или через итерацию отдельными запросами? Я в hibernate обычно пачками видимо в чистой java придется писать код самостоятельно отдельными запросами, но не проблема и batch сделать - просто не стал уже с ним заморачиваться, т.к. не такие уж и большие объемы приходится удалять. Изменено 16 января, 2021 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 17 января, 2021 21 час назад, Evolution сказал: в чистой java есть batch как и в хибернейте есть ссылка? что-то такого не нашел Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 17 января, 2021 (изменено) https://java-course.ru/begin/database03/ https://habr.com/ru/post/501756/ вот к примеру З.Ы. я у себя делал удаление отдельными запросами, чтобы проще было знать сколько записей затронул каждый запрос, для последующего вывода этого в лог сервера. Хотя в принципе смотрю конечно и батч эти данные возвращает, но не вижу смысла реально заморачиваться с усложнением кода запросов удаления предметов - тем более выигрыш в скорости обработки запросов на удаление, после переделки на батч, все равно будет считанные миллисекунды - на фоне общего времени загрузки сервера это ничто. Спойлер Изменено 17 января, 2021 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Instt 0 Опубликовано 25 января, 2021 Получилось всё гораздо проще, во фрагменте завершения ивента можно просто было добавить mysql.set(DELETE FROM items WHERE item_id = ITEM_ID); Удобно, когда не много итемов надо удалять. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 26 января, 2021 11 часов назад, Instt сказал: Получилось всё гораздо проще, во фрагменте завершения ивента можно просто было добавить mysql.set(DELETE FROM items WHERE item_id = ITEM_ID); Удобно, когда не много итемов надо удалять. в памяти процесса всеравно останутся итемы и если их передать кому либо или еще что либо сделать они вновь будут в бд 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты