[Spigot] [MySQL] Abfragen ob Spieler in Datenbank ist oder Online war?

2 Antworten

SQL Tabelle mit 3 Spalten(Usernamen, uuid(key) und money) erstellen und beim joinen eines Spielers soll dieser hinzugefügt/geupdatet werden . Wenn der Username nicht in der Datenbank ist, dann war er nie auf dem Server! :) (Die uuid dient dazu, bei einer Namensänderung alle daten beizubehalten)

Woher ich das weiß:eigene Erfahrung

Juboy6000 
Fragesteller
 22.02.2020, 16:09

Ja genau so habe ich es bis jetzt, mein Problem ist das der Player nicht gefunden wird bei z.b guhruughru

Bsp: Player targetPlayer = Bukkit.getPlayer(args[0]);

Dann kommt in der Console eine NullPointerException.

MFG

0
Juboy6000 
Fragesteller
 22.02.2020, 16:12

Meine Methode:

public static boolean isPlayerExists(Player player) throws SQLException, NullPointerException{

    PreparedStatement stat = MySQL.connection.prepareStatement("SELECT UUID FROM player_data WHERE UUID = ?");
    stat.setString(1, player.getUniqueId().toString());
    ResultSet result = stat.executeQuery();

    if(result.next()) {
        if(result.getString("UUID") != null) {
            return true;
        }
    }
    return false;
}

In der Console habe ich jetzt eine NullPointerException in der Zeile

stat.setString(1, player.getUniqueId().toString());
0
LukeLT  22.02.2020, 17:17
@Juboy6000

wenn du was von einem spieler der offline ist abfragen willst brauchst du ansich garkein Player Objekt da der Name als string schon reicht! ^^ ansonsten wenn du einen online Spieler abfragen willst immer zuerst if(Bukkit.getPlayer(args[0] != null) abfragen ^^

0
Juboy6000 
Fragesteller
 22.02.2020, 17:21
@LukeLT

Okay danke, aber ich frage das Geld aus der MySQL immer mit der UUID ab wenn ich ja aber eingebe /money ijfhtgdijgfijg kommt ein Error weil die UUID nicht gegeben werden kann

MFG.

0
LukeLT  22.02.2020, 17:27
@Juboy6000

Deswegen beides in die SQL Datenbank: Beim joinen wird der Username aus der UUID raus Geupdatet und kann somit als abfrage genutzt werden.

Ein UUID und username cache halt.

Ansonsten ist es nur möglich die uuid eines offline spielers zu bekommen wenn man es über die mojang api abfrägt welche aber drosselt und dem entsprechend nicht für ungecachte abfragen zu empfehlen ist.

0
CuzImckoky  22.02.2020, 23:38
@Juboy6000

Naja wenn der targetPlayer nicht online ist, ist er bei Bukkit.getPlayer(args[0]) auch null. Um das zu vermeiden gäbe es ich Bukkit.getOfflinePlayer. Finde ich aber zu umständlich da es dort bessere Methoden gibt

0

Hey,
ich würde nicht mit 3 Spalten arbeiten.

2 Spalten (UUID, Long) reichen voll aus. Du kannst dir ja immer den PlayerNamen getten mit Bukkit.getOfflinePlayer(UUID uuid). Am besten einfach beim setzen von Coins eines Offlineplayers einfach Bukkit.getUUID(args[Der Namen]).getUUID. Einfach abfragen ob die UUID in deiner Datenbank ist.

Woher ich das weiß:Hobby – 4 Jahre Erfahrung im Programmieren in vielen Sprachen