• 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!

MySQL Error |NullPointerException

T

TheWarZ-Network

Guest
Guten Abend,
Ich habe ein Problem mit MySQL. Ich bekomme eine NullPointerException, welche mich auf folgende Klasse verweist:
Code:
package de.thewarz.lobby.commands;

import java.sql.SQLException;
import java.sql.Statement;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

import de.thewarz.lobby.MySQL;

public class CMD_mysqltest implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(cmd.getName().equals("mysqltest")){
            Statement st = null;
            try {
                st = MySQL.getConnection().createStatement();
                st.executeUpdate("CREATE TABLE coins (uuid VARCHAR(20), coins VARCHAR(10000000))");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

}
Die Verbindung zur Datenbank ist bereits hergestellt.
Danke für alle Antworten!
 

KillawOrCarel

Kuhfänger
Registriert
15 Juli 2017
Beiträge
78
Diamanten
1
Eine NPE (NullPointerException) bedeutet dass eine Nullreferenz ("null") dereferenziert wird. Es wird also versucht eine Methode aufzurufen. Bevor versucht wird zu Programmieren sollten zuerst einmal die Grundlagen gelernt werden. Derartige Fehlermeldungen zeigen nur mal wieder, dass ein kompletter Anfänger versucht sich von anderen seine Programme schreiben zu lassen.

Fehlerbehandlung ist im übrigen trivial: Lernen warum der Fehler auftritt und es dann debuggen.
 
T

TheWarZ-Network

Guest
Und jetzt vielleicht noch mit Zeilennummer und kompletter Fehlermeldung. Glaskugel ist nämlich kaputt.
Entschuldige, das ich mich darauf konzentriert habe nicht auszurasten und nicht darauf, die gesamte Fehlermeldung zu pasten. ;) Eine komplette Meldung sagt dir auch nicht mehr als eine NullPointerException. Zeilennummer: 19.

Eine NPE (NullPointerException) bedeutet dass eine Nullreferenz ("null") dereferenziert wird. Es wird also versucht eine Methode aufzurufen. Bevor versucht wird zu Programmieren sollten zuerst einmal die Grundlagen gelernt werden. Derartige Fehlermeldungen zeigen nur mal wieder, dass ein kompletter Anfänger versucht sich von anderen seine Programme schreiben zu lassen.

Fehlerbehandlung ist im übrigen trivial: Lernen warum der Fehler auftritt und es dann debuggen.
Du bist also der Meinung das bei Profis keine NullPointer auftreten können? Und ich bin leider kein "kompletter Anfänger" mehr, tut mir leid falls ich dich jetzt enttäuscht habe. Ich habe nur vorgestern mit MySQL erst angefangen. Und deine Aussage, das ich von anderen meine Plugins geschrieben haben will, weise ich besimmt von mir. Ich dachte das man in diesem Forum gute Antworten bekommt, und keine Vorwürfe.

Meine Glaskugel sagt: Zeile 19 und dass MySQL.getConnection() null zurück liefert.

Zeile 20 dürfte aber auch eine SQLException zurück liefern. 10 MB pro Tabellenzeile? :D
Super, deine Glaskugel funktioniert! ;) Aber "10 MB pro Tabellenzeile" verstehe ich nicht ganz. Du kannst es ja eventuell erklären, was du damit meintest? :)
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Entschuldige, das ich mich darauf konzentriert habe nicht auszurasten und nicht darauf, die gesamte Fehlermeldung zu pasten. ;) Eine komplette Meldung sagt dir auch nicht mehr als eine NullPointerException. Zeilennummer: 19.
Wer eine NPE nicht debuggen kann hat in der Regel auch keine Ahnung wie das Stacktrace aufgebaut ist. Von daher frag ich absichtlich nicht nach der Zeilennummer weil ich sicher gehen will dass ich auch wirklich die richtige Zeile genannt bekomme. Wenn du dir aber bewusst bist, dass das volle Stacktrace in diesem Fall keine weiteren Informationen liefert frag ich mich warum du nicht die Zeilennummer von dir aus hinzufügst. Wie dem auch sei, ich guck mir Probleme nicht an solang ich nicht das Mindestmaß an Informationen habe. Viele orakeln hier gerne rum und am Ende stellt sich raus dass der TE vielleicht in einer ganz anderen Datei den Fehler hat. Alles schon erlebt. Daher ist das Stacktrace immer relevant. Wenn man von anderen Hilfe möchte ist es immer praktisch wenn sich diese die Informationen nicht erbetteln müssen ;)

Ich nehm jedoch an du hast dein Problem nun lösen können? Du greifst auf MySQL statisch zu. Vermutlich wurde das Feld welches du in dieser Methode zurück gibst noch nicht initialisiert. Hier wäre es ansonsten praktisch noch die getConnection() Methode inklusive aller darin benutzen Felder und Methoden der MySQL Klasse zu sehen.

Entschuldige, das ich mich darauf konzentriert habe nicht auszurasten und nicht darauf, die gesamte Fehlermeldung zu pasten. ;) Eine komplette Meldung sagt dir auch nicht mehr als eine NullPointerException. Zeilennummer: 19.


Du bist also der Meinung das bei Profis keine NullPointer auftreten können? Und ich bin leider kein "kompletter Anfänger" mehr, tut mir leid falls ich dich jetzt enttäuscht habe. Ich habe nur vorgestern mit MySQL erst angefangen. Und deine Aussage, das ich von anderen meine Plugins geschrieben haben will, weise ich besimmt von mir. Ich dachte das man in diesem Forum gute Antworten bekommt, und keine Vorwürfe.


Super, deine Glaskugel funktioniert! ;) Aber "10 MB pro Tabellenzeile" verstehe ich nicht ganz. Du kannst es ja eventuell erklären, was du damit meintest? :)
Die geklammerte Zahl im Datentyp gibt die Länge dieses Typs an. Was das genau bedeutet hängt vom verwendeten Typ ab. Im Falle von VARCHAR sind es jedoch Bytes. Das heißt jeder Eintrag in deiner Datenbank ist ~10MB groß und wie @BlackHole auch schon angemerkt hat würde das selbst dann nicht funktionieren wenn du es beabsichtigt hast. Vermutlich solltest du dir mal Text (https://dev.mysql.com/doc/refman/5.7/en/blob.html) angucken.

Edit: Du solltest deine Coins natürlich als Zahl speichern und nicht als String, das ist mir gerade erst aufgefallen. https://dev.mysql.com/doc/refman/5.7/en/data-types.html
 
Zuletzt bearbeitet:

KillawOrCarel

Kuhfänger
Registriert
15 Juli 2017
Beiträge
78
Diamanten
1
Du bist also der Meinung das bei Profis keine NullPointer auftreten können?
Mit gewissen Programmierstilen und Bibliotheken ist eine NPE beinahe auszuschließen. Null ist ein schlecht konzipiertes Konzept. In der Praxis aber sicherlich nicht unumgänglich. Da kann auch mal von Zeit zu Zeit so ein Fehler auftreten. Genau wie Syntax oder Rechtschreibfehler auch. Perfektion ist kein Kriterium hier (hab ich auch nirgendwo gesagt).

Und ich bin leider kein "kompletter Anfänger" mehr, tut mir leid falls ich dich jetzt enttäuscht habe. Ich habe nur vorgestern mit MySQL erst angefangen.
Habe ich meine Aussage als Frage formuliert? Tut mir leid. Die Intention hinter dieser Aussage war es dies nur festzustellen. Die hier gefallenen Aussagen verdeutlichen nur erneut warum hier eindeutig die Kompetenzen überstiegen werden. Es ist trivial festzustellen, dass hier ein blutiger Anfänger derartige Fragen stellt. Eine andere Feststellung wäre schlicht falsch. Beweise: 1. Fehlerdiagnose es würde auch nur in entferntester weise an einer Datenbank liegen ist absurd. 2. Der triviale Fehler könnte nicht selbständig gelöst werden.
3. Trotz Fehler Ursache (siehe meinen ersten Beitrag) keine Besserung
4. JDBC wird mit MySQL gleichgesetzt.

Und deine Aussage, das ich von anderen meine Plugins geschrieben haben will, weise ich besimmt von mir. Ich dachte das man in diesem Forum gute Antworten bekommt, und keine Vorwürfe.
Es gab eine Fehlerdiagnose und damit eine Antwort. Da hier nicht der geringste Funke an Eigenleistung erkannt werden konnte, ist die Schlussfolgerung beinahe mehr als nur Plausibel. Ein derartiges Muster - so schlecht wie es auch sein mag - wurde warscheinlich von irgend einem 0815 Kiddy aus einem deutschen oder englischen Forum übernommen. Dies wird durch die Aussagen oben untermauert.

Hilfe ist hier kostenlos. Bevor eine Frage gestellt wird sollte eine gewisse Eigenleistung erfolgen, sonst leisten die entsprechenden Helfer viel mehr als der Fragesteller selbst.

 
Oben