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

Spigot SQL Error

RazorShark

Minecrafter
Registriert
24 Mai 2020
Beiträge
2
Diamanten
300
Hallo zusammen. Ich habe derzeit ein Problem mit MySQL. Wenn ich den Server starte, gibt es keinen Fehler und die Tabellen werden ohne Fehler erstellt. Wenn ein Spieler den Server betritt, fragt das Plugin, ob der Spieler bereits in der Datenbank vorhanden ist. Wenn nicht, wird der Player hinzugefügt. Die Abfrage funktioniert auch. Ein Fehler tritt erst nach ca. 12-24 Stunden auf (warum auch immer). Der Fehler scheint durch das JoinEvent ausgelöst zu werden, in dem sich die Abfrage befindet.

Fehler: https://pastebin.com/C5Ma4Lf1

Abfrage: https://pastebin.com/0qRfAfpN

StatsManager: https://pastebin.com/yypDUQVD

MySQL Class: https://pastebin.com/7HFwPtSu
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Ich schließ mich meinem Vorredner an, jedoch, da nicht die gesamten Klassen gepostet wurden (also ohne Importe) sind die Zeilen verrutsch.

Falls es die Connection ist, einfach in es so umbauen, dass wenn eine Connection null ist, sofort wiederzuverbinden.
 
D

deleted191294

Guest
Hallo,

an den Punkt, dass die Datenbank deine Verbindung wegen Inaktivität schließt, solltest du eigentlich nie kommen.
Stattdessen solltest du die Verbindung jedes Mal erneut öffnen, wenn du eine Aktion durchführen willst.

LG
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Hallo,

an den Punkt, dass die Datenbank deine Verbindung wegen Inaktivität schließt, solltest du eigentlich nie kommen.
Stattdessen solltest du die Verbindung jedes Mal erneut öffnen, wenn du eine Aktion durchführen willst.

LG
Bitte WAS?
Du solltest einfach eine DateSource mit vernünftigem Timeout nutzen, die sich darum kümmert, dass die Verbindung immer in gutem Zustand ist. Wenn du für jede Query erst noch die Verbindung öffnen willst, kannst du dir die Datenbank eigentlich fast schon komplett sparen. Woher nimmt man sowas?

Und zum Problem von @RazorShark. Du machst den gleichen Scheiß, wie dein Kollege in nem anderen Thread. Du öffnest ein ResultSet. Das sind echte Ressourcen, die im SQL Treiber gespeichert werden, wenn du die nicht korrekt wieder schließt, dann hast du Speicherlöcher und Ressourcenprobleme. Dazu kommt, dass dein ganzer Code auch einfach teils falsch ist, weil du mit dem Kontrollfluss und Exceptions überfordert scheinst. Das ist kein SQL Problem, das ist ein Grundlagenproblem, von daher auch an dich der Hinweis, dass du erstmal Programmieren lernen solltest, bevor du auch noch SQL mit in den Topf wirfst, denn momentan scheinst du verbissen darauf zu sein, dass du nur ein SQL Problem hast.

Diese ganzen "MySQL" Klassen und Scheiß, der hier immer und immer wieder ausgegraben und gepostet wird. Vermutlich von Youtube und anderen schlechten Quellen kopiert. Ist einfach Müll. Es hat einen Grund, warum die SQL API so funktioniert, wie sie funktioniert. Könnte man da einfach eine SQL-Klasse draus machen, dann hätte Oracle das schon gemacht. Datenbank sind halt einfach nicht so trivial wie eine YML Config. Da hängen komplexere Abläufe dahinter, weil man damit auch komplexe Anwendungen abdecken kann. Wer dann seine Datenbankoperationen noch im Hauptthread macht, weiß besser ganz genau was er tut, denn sonst gibt es richtig böse Lags. Im übrigen auch ein Irrglaube, dass man mit einer Datenbank bessere Performance hat. Solange die Daten auch einfach in den RAM passen ist das immer die einfacherere Lösung.
 

RazorShark

Minecrafter
Registriert
24 Mai 2020
Beiträge
2
Diamanten
300
Dazu kommt, dass dein ganzer Code auch einfach teils falsch ist
Okay, dann zeig mir wie so ein Code aussehen soll. Außerdem hat mir deine Besserwisserei 0 weitergeholfen. Scheinbar hast du das Studiert so wie du schreibst.

erstmal Programmieren lernen solltest
Wenn ich sowas lese ...
Punkt 1. Ich denke ich kann programmieren sonst hätte ich nicht einige erfolgreiche Projekte hinter mir.
Punkt 2. Zudem programmiere ich derzeit eine eigene Cloud. Und ich kann dir eins sagen Da steckt eine Menge dahinter.
Punkt 3. Nur weil ich eine MySQL-Class habe, die nach deiner Aussage komplett falsch ist , heißt es nicht da ich nicht programmieren kann.
Punkt 4: Wieso habe ich dann Erfahrung im Umgang mit der Spigot-API sowie mit (Multi-) BungeeCord Systemen ?!
Punkt 5: Wieso habe ich mehr oder weniger Grundkenntnisse im Bereich Messaging (AMQP, Redis Pub/Sub, ..) ?!
Punkt 6: Wieso habe ich Erfahrung mit Java und dessen Konzept der OOP ?!

Ich kann nur so viel sagen: Ich halte mich nicht immer an die Java Konventionen.
 
Zuletzt bearbeitet:

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Punkt 1. Ich denke ich kann programmieren sonst hätte ich nicht einige erfolgreiche Projekte hinter mir.
Ich kann nur so viel sagen: Ich halte mich nicht immer an die Java Konversion.

Lesbaren, wartbaren Code zu schreiben ist auch eine absolute Grundkompetenz. Lesbaren, wartbaren Code erhält man unter anderem, in dem man sich an Konventionen hält.
Ich finde deinen oben geposteten Code sogar ganz annehmbar, wenn man vom leichten Rechtsdrall deiner If/else-Statements absieht - das ist aber auch Geschmackssache. Deine Aussage wiederum ist so absolut nicht annehmbar.

Zum Problem selber: Ich würde einen Connection Pool nutzen. Damit ist sichergestellt das die Verbindung bestehen bleibt & die Performance ist ebenfalls besser. Siehe z.B. hier.
Dies ist auch der Weg den viele erprobte, stabile und zuverlässige Plugins wählen, die SQL nutzen, wie z.B. LogBlock.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830

Ich rechtfertige mich für gar nichts. Glaub was du glauben willst. Ich geb jedem eine Chance, du hattest deine. Viel Erfolg im weiteren Leben und im Forum. Und sei froh, dass @LapisMC scheinbar schmerzresistent ist, so hast du zumindest die Chance dich zu bessern, von mir gäbs das nicht. Dafür ist mir meine Zeit zu schade.
 
Oben