[英]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.