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

Programmierung | Async MySQL | Hilfe

MegaSwife4711

Minecrafter
Registriert
30 Oktober 2015
Beiträge
7
Alter
24
Diamanten
300
Hey!
Ich schreibe zur Zeit ein Minigame, in welchem es natürlich auch Stats geben soll.
Diese sollen jetzt allerdings nicht synchron geladen (wäre ja zu einfach :p) werden, sondern asychron aus der MySQL-Datenbank heruntergeladen werden.
Und das ist das Problem.
Habe jetzt bereits 3 Stunden YT-Videos gefressen und Foren durchforstet - ich verstehe es nicht.

Kann mir das jemand erklären? (gerne auch per PN)
Oder einfach mal eine "getKills"-Methode schreiben und hier posten?

Ich wäre sehr dankbar.

MfG
Tim

//Ich bin kein Neuling in der Programmierung und bis jetzt noch nie auf so ein Problem gestoßen.
Bin wahrscheinlich nur zu blöd; es ist bestimmt einfach. :D
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Bei der asynchronen Programmierung musst du die Abfrage über JDBC über einen seperaten Task erzeugen.
Also konkret bedeutet das, dass du einen Hauptthread hast, wo alle Events, Commands und sonstiges ausgeführt wird (eben der Hauptthread vom Server).
Wenn du nun eine asynchrone Datenbankabfrage starten möchtest, must du diesen über einen seperaten Thread ausführen. Dafür musst du einen neuen Thread erzeugen und in diesem die Verbindung zu der Datenbank händeln. Schlussendlich solltest du die Resultate, solange diese nicht threadsafe sind, im Hauptthread wieder behandeln, weswegen du mit dem Bukkit-Scheduler diese einreihen kannst:
Code:
Bukkit.getScheduler().scheduleSyncDelayedTask(Plugin plugin, Runnable runnable);

Lambda-Notations helfen bei sowas übrigens ungemein.

Zur konkreten Umsetzung:
Ich mach es mir einfach und benutze eine vorhandene Lib. Wenn du das nicht möchtest, kannst du dir auch etwas selbst schreiben ;)
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Da gibt es verschiedene Ansätze. Ich arbeite gerne Consumern und asynchronen Tasks.

Du solltest also deine Frage präzisieren, wenn du mit der Umsetzung einer bestimmten Variante Probleme hast. Gegebenenfalls kannst du ja dann auch mal Links zu den Videos mit uns teilen, damit wir wissen, wo du gerade dran bist.
 
Oben