Перейти к содержанию
Авторизация  
Instt

Удаление предметов по окончанию ивента

Рекомендуемые сообщения

Как реализовать запрос в бд в коде ивента, чтобы по окончанию ивента удалялись ивентовые итемы?
Сам запрос вроде знаю какой (DELETE FROM items WHERE item_id = ITEM_ID)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавить импорты, и по окончанию ивента что-то похожее, переделанное под Ваш скрипт:
                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);
                }

Изменено пользователем Rolo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем? 

В l2item делаем переменную eventItem, к ней геттер и сеттер.

При выдачи итемов в скрипте евента item.setEventItem(true)

Дальше везде где нужны какие либо проверки item.getEventItem()

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 15.01.2021 в 00:04, Instt сказал:

Как реализовать запрос в бд в коде ивента, чтобы по окончанию ивента удалялись ивентовые итемы?
Сам запрос вроде знаю какой (DELETE FROM items WHERE item_id = ITEM_ID)

+ перед этим по игрокам в в онлайне пробежаться, так же удалив у всех нужные предметы.

так же как вариант можно просто каким либо способом запланировать выполнение определенных действий с бд при запуске сервера.

Спойлер

73c99d8d3d2d65da365c4eb15273095e.jpg

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Gaikotsu сказал:

+ перед этим по игрокам в в онлайне пробежаться, так же удалив у всех нужные предметы.

так же как вариант можно просто каким либо способом запланировать выполнение определенных действий с бд при запуске сервера.

  у меня к примеру так сделано (Показать контент)

73c99d8d3d2d65da365c4eb15273095e.jpg

 

удаляешь сразу пачками или через итерацию отдельными запросами? Я в hibernate обычно пачками видимо в чистой java придется писать код самостоятельно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, gawric сказал:

удаляешь сразу пачками или через итерацию отдельными запросами? Я в hibernate обычно пачками видимо в чистой java придется писать код самостоятельно

в чистой java есть batch как и в хибернейте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, gawric сказал:

удаляешь сразу пачками или через итерацию отдельными запросами? Я в hibernate обычно пачками видимо в чистой java придется писать код самостоятельно

отдельными запросами, но не проблема и batch сделать - просто не стал уже с ним заморачиваться, т.к. не такие уж и большие объемы приходится удалять.

Изменено пользователем Gaikotsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
21 час назад, Evolution сказал:

в чистой java есть batch как и в хибернейте

есть ссылка? что-то такого не нашел

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://java-course.ru/begin/database03/

https://habr.com/ru/post/501756/

вот к примеру

 

З.Ы. я у себя делал удаление отдельными запросами, чтобы проще было знать сколько записей затронул каждый запрос, для последующего вывода этого в лог сервера. Хотя в принципе смотрю конечно и батч эти данные возвращает, но не вижу смысла реально заморачиваться с усложнением кода запросов удаления предметов - тем более выигрыш в скорости обработки запросов на удаление, после переделки на батч, все равно будет считанные миллисекунды - на фоне общего времени загрузки сервера это ничто.

Спойлер

f3fb302d9a7fb41df68610df0072a858.jpg

 

Изменено пользователем Gaikotsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получилось всё гораздо проще, во фрагменте завершения ивента можно просто было добавить
mysql.set(DELETE FROM items WHERE item_id = ITEM_ID);

Удобно, когда не много итемов надо удалять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 часов назад, Instt сказал:

Получилось всё гораздо проще, во фрагменте завершения ивента можно просто было добавить
mysql.set(DELETE FROM items WHERE item_id = ITEM_ID);

Удобно, когда не много итемов надо удалять.

в памяти процесса всеравно останутся итемы и если их передать кому либо или еще что либо сделать они вновь будут в бд

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...