• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Bungeecord Plugin Fehler

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Könnte sein das die Tabelle noch nicht exestiert oder plugin null ist.
Java:
MySQL(plugin).getResult("SELECT * FROM hideTable WHERE UUID='" + uuid + "'");

Wäre auch interessant zu wissen welche Zeile die 602 bei dir ist.
 
D

deleted202832

Guest
Zeig mal bitte was bei dir "plugin" ist.
Kann auch sein das die Methode getResult permanent null zurückgibt.
Was ich dir noch raten kann ist das du den Code logisch über mehrere Klassen aufteilst damit du keine 600 Zeilen Klassen hast und alles übersichtlich ist

Könnte sein das die Tabelle noch nicht exestiert
Dann müsste meines Wissens nach sowas auch im Error drin stehen - Table not exists oder ähnliches
 
Zuletzt bearbeitet von einem Moderator:

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
1.: Bitte benutze bei deiner SQL-Abfrage PreparedStatements. Siehe hier.
2.:
Code:
if (rs.next()) {
    return rs.getString("UUID") !=null;
}
Das macht nicht wirklich Sinn. Wenn es im ResultSet ein nächstes Element gibt, dann muss rs.getString("UUID") auch etwas ausgeben, was nicht null ist. Außer du hast deine Tabelle so konfiguriert, dass eine UUID auch null sein darf, was aber kaum Sinn machen dürfte. Immerhin dürfte die UUID wohl dein Primary Key sein :p
3.: Zeige mal die Methode "MySQL$getResult", ansonsten wird das wohl vorerst hier nichts.
4.: Wenn du dir es einfach machen möchtest, dann schau mal hier.
 

RaidProgramming

Minecrafter
Registriert
5 Oktober 2018
Beiträge
5
Diamanten
0
Der Fehler bedeutet das rs in Zeile 602 null ist.
Hier eine kurze Erklärung, damit du in Zukunft diese Art von Fehler auch alleine lösen kannst.
  1. Generell bedeutet eine NullPointer Exception, dass du versuchst eine Methode oder ähnliches von einem Objekt aufzurufen, welches null ist. Daher kannst du bei dieser Art von Exception meistens davon ausgehen, dass das Objekt (in der angegeben Zeile), von welchem du eine Methode aufrufst, null ist.
  2. Ich würde dir ebenfalls empfehlen PreparedStatements zu verwenden, diese haben viele Vorteile, wie bessere Sicherheit.
  3. Generell ist es besser nicht einfach Select * zu benutzen, zur besseren Performance solltest du die Spalten direkt angeben
Hier nochmal ein kleines Beispiel mit einem PreparedStatement
java:
try {
    // Statement erstellen
    PreparedStatement ps = MySQL.getCon().prepareStatement("SELECT UUID FROM hideTable  WHERE UUID = ?");
    // Id in Statement hinzufügen
    ps.setString(1, uuid.toString());
    ResultSet rs = ps.executeQuery();
    // Zurückgeben, ob die Id existiert
    return rs.next();
} catch (SQLException e) {
    e.printStackTrace();
}
 
Zuletzt bearbeitet:

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Ich möchte dem Codeschnipsel von @RaidProgramming noch etwas wichtiges hinzufügen:
Wenn du dir eine Datenbank-Verbindung holst, ein PreparedStatement und ein ResultSet benutzt, dann solltest du alles nach dem Benutzen wieder schließen.
Folgende Reihenfolge ist die richtige:
Connection aufbauen -> PreparedStatement holen -> ResultSet holen -> ResultSet auslesen -> ResultSet schließen -> PreparedStatement schließen -> Connection schließen.

Ansonsten baust du immer neue Verbindungen auf und irgendwann sagt deine MySQL-Datenbank "Ich hab keine Lust mehr auf neue Verbindungen, da gibts doch schon genug!".
Ich empfehle dir deswegen, die von mir verlinkte CommandLib zu benutzen oder Alternativen zu benutzen.

Bezüglich Performance:
Ich bezweifle, dass das den enormen Unterschied bringt. Du kannst gerne direkt die Spalten angeben, nur bringt dir das hier relativ wenig.
Es wäre eher sinnvoll, deine SQL-Query in folgendes abzuändern:
Code:
SELECT COUNT(*) as c FROM <tablename> WHERE UUID=?
Dadurch würdest du tatsächlich nur die entsprechenden Vorkommnisse zählen und hättest keine Daten, die MySQL zusammensuchen muss.
 
Oben