簡體   English   中英

如何檢查mysql條目是否存在

[英]How to check whether or not a mysql entry exists

我試圖檢查玩家是否在 MySQL 數據庫中。

我的代碼是這樣的:

    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 設置在 Class 中,並且數據庫中確實存在具有 uuid 的玩家

每次調用該方法(一個單例 ArrayList)時都創建一個列表是一種內存浪費,即使您沒有注意到它。 如果查詢中沒有要插入的值,則您也不需要在語句中傳遞索引或值。 如果您嘗試只檢查一個 uuid,則不必使用 while 循環。 您還可以使用 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 查詢。 在我的示例中,所有內容都是同步執行的。

我建議使用以下代碼和查詢

 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();
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM