Как проверить, существует ли запись mysql - PullRequest
0 голосов
/ 01 марта 2020

Я пытался проверить, есть ли Player в базе данных * 1007. *

Мой код для этого был таким:

    public boolean existUUID() {
        List<String> list = new ArrayList<>();

        try {
            PreparedStatement state = MySQL.c.prepareStatement("SELECT * FROM players");
            state.setString(1, this.uuid.toString());

            ResultSet result = state.executeQuery();

            while (result.next()) {
                list.add(result.getString("uuid"));
            }
            result.close();
            state.close();


        } catch (SQLException e) {
            e.printStackTrace();
        }

        return list.contains(this.uuid);
    }

uuid установлено в классе и игрок с UUID существует в базе данных

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Создание списка при каждом вызове метода (одноэлементный ArrayList) - пустая трата памяти, даже если вы ее не замечаете. Вам также не нужно передавать индекс или значение в вашем выражении, если в вашем запросе нет значений для вставки. Если вы пытаетесь проверить только один uuid, вам не нужно использовать while-l oop. Вы также можете использовать ресурс try-with-resource, чтобы закрыть свои заявления, когда они больше не нужны. Если вы хотите прочитать значения из базы данных SQL, я бы всегда рекомендовал использовать потребитель. Я приложил пример:

public void registeredUniqueId(UUID uniqueId, Consumer<Boolean> registered) {
    try (PreparedStatement statement =  connection.prepareStatement(String.format("SELECT * FROM players WHERE UUID='%s'", uniqueId.toString())); ResultSet resultSet = statement.executeQuery()) {

    if (resultSet.next() && resultSet.getString("UUID") != null) {
      registered.accept(true);
    }
  } catch (SQLException ex) {
    ex.printStackTrace();
    registered.accept(false);
  }
}

Я рекомендую всегда выполнять MySQL запросы асинхронно. В моем примере все выполняется синхронно.

0 голосов
/ 01 марта 2020

Я бы предложил следующий код и запрос

 public boolean existUUID() {
        List<String> list = new ArrayList<>();

        try {
            PreparedStatement state = MySQL.c.prepareStatement("SELECT * FROM players where uuid=?");
            state.setString(1, this.uuid.toString());

            ResultSet result = state.executeQuery();

            while (result.next()) {
                return true
            }
            return false


        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally
        {
            result.close();
            state.close();
        }

    }

...