1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Обновление игрока

Тема в разделе "Разработка плагинов для новичков", создана пользователем SergK35, 20 ноя 2019.

  1. Автор темы
    SergK35

    SergK35 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Доброго времени суток, подскажите пожалуйста как можно обновлять игрока, если произошли какие-либо изменения в базе данных?

    Имею ХэшМапу(Имя_игрока, сам объект). Если я достаю объект, который мне необходим, то значения в нем те, которые были занесены при старте плагина или те, которые были обновлены при каком-либо действии(например покупка чего-либо), но что делать, если данные были изменены не на сервера, а сразу в бд? Вот что придумал я:
    Код:
    public Voter getPlayer(String player) {
            Voter voter = votePlayers.get(player.toLowerCase());
            if(storageManager.selectPlayer(player) != null) {
                voter = storageManager.selectPlayer(player);
                votePlayers.put(voter.getName().toLowerCase(), voter);
            }
            return voter;
        }



    (То бишь при получении игрока, мы ему присвоим значения сразу из бд)
    Код:
    public Voter selectPlayer(String playerName) {
            PreparedStatement preparedStatement = null;
            try {
                preparedStatement = StorageManager.this.connection.prepareStatement("SELECT * FROM vote WHERE player=?");
                preparedStatement.setString(1, playerName);
                ResultSet rs = preparedStatement.executeQuery();
                while (rs.next()) {
                    String name = rs.getString("player");
                    int amount = rs.getInt("amount");
                    Voter voter = new Voter(name, amount);
                    return voter;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                this.closeStatement(preparedStatement);
            }
            return null;
        }

    Мне кажется, что такое действие не является совсем верным, потому что как минимум selectPlayer работает не асинхронно с базой. Нормально засунуть асинхронный поток в этот метод у меня не получилось. Что можете посоветовать?
     
    Последнее редактирование: 20 ноя 2019
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Мемори база для быстрого доступа, например redis server.
     

Поделиться этой страницей