Бот в Discord необычно повторяет

Итак, я пытаюсь создать бота Discord, который имеет простой доступ к базе данных для печати значений, мой код в настоящее время будет печатать значения на сервере Discord, но он повторяет их 5 раз.

Класс функциональности бота:

private MySQLAccess sql = new MySQLAccess();

public static void main(String[] args) throws Exception {
    JDABuilder ark = new JDABuilder(AccountType.BOT);
    ark.setToken("insert_discord_token_here");
    ark.addEventListener(new MessageListener());
    ark.buildAsync();
}



@Override
public void onMessageReceived(MessageReceivedEvent e) {
    if (e.getAuthor().isBot()) return;
    Message msg = e.getMessage();
    String str = msg.getContentRaw();

    //Ping pong
    if (str.equalsIgnoreCase("!ping")) {
        e.getChannel().sendMessage("Pong!").queue();
    }

    //Bal check
    if (str.contains("!bal")) {
        String user = str.substring(5);
        System.out.println(user);
        try {
            sql.readDataBase(e.getChannel(), user);
        } catch (Exception e1) {
        }

    }
}

Класс доступа к базе данных:

private Connection connect = null;
private Statement statement = null;
private ResultSet resultSet = null;
private final String user = "pass";
private final String pass = "user";


public void readDataBase(MessageChannel msg, String username) throws Exception {
    //Retrieve data and search for username
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");

        connect = DriverManager.getConnection("jdbc:mysql://localhost/serverusers?allowPublicKeyRetrieval=true&useSSL=false", user, pass);

        statement = connect.createStatement();
        resultSet = statement
                .executeQuery("select * from serverusers.userinfo where user=\"" + username + "\"");
        writeResultSet(resultSet, msg);

    } catch (Exception e) {
        throw e;
    } finally {
        close();
    }

}

private void writeResultSet(ResultSet resultSet, MessageChannel msg) throws SQLException {
    // Check resultSet and print its contents
    if (resultSet.next()) {
        String user = resultSet.getString(2);
        Double website = resultSet.getDouble(3);
        msg.sendMessage("User: " + user).queue();
        msg.sendMessage("Bank Amount: " + website).queue();
    }
}

private void close() {
    try {
        if (resultSet != null) {
            resultSet.close();
        }

        if (statement != null) {
            statement.close();
        }

        if (resultSet != null) {
            resultSet.close();
        }
        if (connect != null) {
            connect.close();
        }
    } catch (Exception e) {

    }
}

Когда программа запускается, она находит правильные данные, которые я ищу, и с функцией поиска все в порядке, но по какой-то странной причине программа будет выдавать одно и то же имя пользователя и балансирует 5 раз. Скриншот Discord Bot

Проверьте свой ResultSet в методе WriteResultSet, у него один и тот же пользователь 5 раз?

kaya 09.09.2018 01:53

@kaya Как ни странно, проблема разрешилась сама собой после быстрой перезагрузки, но спасибо за помощь!

Gafarrell 09.09.2018 20:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
752
1

Ответы 1

Распространенной ошибкой здесь является то, что вы запускаете программу несколько раз, а затем каждый экземпляр отвечает одним и тем же. Вы можете проверить, так ли это, открыв диспетчер задач и выполнив поиск java-процессов. Это часто происходит с разработчиками, использующими Eclipse IDE, потому что консоль скрывает другие процессы за раскрывающимся меню на консоли.

OP заявил, что это было исправлено после перезапуска, поэтому это следует принять

nathanfranke 13.01.2019 04:21

Другие вопросы по теме