Beiträge von Aquaatic

    Jagut. Wollte ich ja auch zufällig. Nur irgendwie klappt dann nichts mehr ^^

    Das liegt aber nicht an den PreparedStatements, sondern an dem unterschiedlichen Code. Der entscheidende Unterschied ist schon benannt: in dem Code für die query-Methode mit "normalen" Statements schließst du - im Gegensatz zu dem mit PreparedStmts - das Statement nicht per try-with-resources.


    Die Lösung dafür ist aber nicht, einfach das Statement nicht zu schließen, wie Rincewind empfiehlt

    Das einzige, was du an deinem Code oben ändern musst, ist halt dein PreparedStatement in der "query" Methode nicht zu schließen, sondern nur das ResultSet nach der Auswertung.

    es ist nämlich mindestens good practice alles zu schließen, was geht, um Memory Leaks zu vermeiden. Ebenso ist der Workaround von zM4xi für das Problem mit den HashBasedTables auch nicht empfehlenswert, weil unnötigerweise jedes mal eine Kopie von den angefragten Daten angefertigt wird.

    Meine Lösung wäre es, einzig und allein eine Utility-Methode prepareStatement(String query, Object... params) einzuführen, die einfach nur das PreparedStatement bereitstellt (und dieses logischerweise auch nicht schließt) und dann kann man eine Abfrage wie folgt machen:

    Code
    1. try (PreparedStatement stmt = db.prepareStatement(...);
    2. ResultSet rs = stmt.executeQuery()) {
    3. // ...
    4. } catch (Exception e) {
    5. // ..
    6. }

    Das sind Kinder, keine Unternehmen. Kinder, die Spaß wollen

    Das ist der wichtige Punkt hier. Alle gehen hier immer gleich von unternehmerischen Plänen aus, obwohl man durchaus auch aus Spaß und persönlicher Überzeugung ohne Profitabsicht an einem solchen Projekt mitwirken kann - insbesondere als junge Persönlichkeit. Sollte mich ein Projekt hier wirklich mitreißen, dann mache ich da mit, auch wenn ich dafür kein Geld bekomme. Hobby nennt man das dann. Und das sage ich auch als jemand, der schon für viel Geld freelancemäßig Software entwickelt hat.

    Ich denke, dass einige hier das ganz aus den Augen verloren haben. Viele haben hier mal aus Spaß an einem Server mitgewirkt. Das war doch 'ne geile Zeit, oder nicht? Ich habe sogar wegen einem Server angefangen zu programmieren. Irgendwann ist das Team dann zerfallen, aber was solls? Es war trotzdem eine wichtige Zeit meiner Persönlichkeitsentwicklung - und genau das bietet er hier an. Sogar mit noch 10€ pro Monat extra! Hier geht es nicht darum irgendwelche Profi-Entwickler zu finden, sondern Leute, die einfach Spaß am programmieren haben. Deshalb sind die Ansprüche an die Ersuchen hier auch völlig überzogen.

    Aber nicht nur die Ansprüche an die Ersuchen, sondern auch an die anderen Posts: ich meine früher (am Anfang) waren das hier größtenteils solche Leute, die einfach Spaß am programmieren hatten. Man hat sich gegenseitig gerne geholfen, ist miteinander gewachsen. Irgendwer hat was cooles mit NMS herausgefunden und alle waren gehyped. Heute ist das hier steril und hat einfach seinen "spaßigen" Charakter verloren. Deswegen bin ich hier auch nicht mehr als aktives Mitglied unterwegs. Wenn ich eine Frage habe, dann stelle ich die auf StackOverflow - insbesondere, weil hier nicht das geballte Wissen eines Teilgebietes der Entwicklung vorhanden ist wie auf StackOverflow bzw. EE-StackExchange für Microcontroller-Sachen.


    Zum Post: ist doch ne schöne Idee! Früher wäre ich da bestimmt sofort dabeigewesen. Ich habe lange Zeit nach einem Server mit so einer Idee gesucht, wollte auch mal selber sowas anfangen, aber ich habe einfach kein Team zusammenbekommen.

    Wenn du BungeeCord benutzt, also die Minecraft-Server im Offline-Mode sind, werden die UUIDs in Abhängigkeit des Spielernamens generiert (glaube ich, vielleicht sind sie auch zufällig gewählt). Falls das also der Fall ist, hat BungeeCord da schon eine Gegenmaßnahme: bungeecord auf true in den Spigot-Konfigurationen und in der BungeeCord-Konfiguration ip-forwarding einschalten.

    I don't get what you are trying to do. If I understand you correctly, you are trying to remove the dropped item from the inventory. This however is default behavior, so it makes no sense. Please elaborate on what exactly are you are trying to achieve (and why you are writing in English even though you are German and this is a German forum)

    Wenn dem tatsächlich so ist, solltest du dich so schnell wie möglich von dem Netzwerk entfernen. Memory Leaks sind nichts gutes. Es ist einfach Platz im RAM, der nicht benutzt, aber belegt ist. Man weiß aber auch nicht, wo diese Stellen sind - sie bringen dir rein gar nichts. Auch nicht, um irgendwelche Abfragen zu sparen (wie auch immer das funktionieren soll).

    Na also das mit dem $ kannst du aber nicht als schlecht hinstellen xD So haben die Entwickler halt entschieden das eine Variable definiert wird

    Doch, kann ich. Wenn mein halber Code aus $-Zeichen besteht, weil mich die Sprache dazu zwingt das vor den Variablennamen zu schreiben, ist das einfach hässlich. Übrigens wären, wenn deine Argumentation stringent wäre, alle Argumente gegen eine jede Programmiersprache hinfällig - schließlich ist ja alles so von den Entwicklern entschieden worden und deshalb gut!

    Naja versuch erstmal den Code zu finden wenn man es Obfuscated hat

    Das sollte kein Problem darstellen: nach Verwendung von einer Klasse suchen, die Http im Namen hat (ich wage stark zu bezweifeln, dass du extra eine Implementierung des HTTP-Protokolls geschrieben hast, die du dann obfuscated hast, da die meisten Lizenzen Obfuscation verbieten oder erschweren - z.B. bei Netty muss man "bei modifizierten Dateien an auffälliger Stelle angeben, dass sie modifiziert sind" (Wikipedia, Apache-Lizenz)) und dann ein bisschen schauen, was du da machst, und entsprechenden Code entfernen

    Nun ist diese Methode aber nicht gerade sicher bzw. möglich zu manipulieren

    Jede Methode, mit der du versuchst dein Programm, das in Java geschrieben ist, abzusichern, kann manipuliert werden (einfach dekompilieren und entsprechenden Code rausnehmen). Also lass es einfach - diejenigen, die es klauen wollen, werden es klauen und die anderen werden sich mit deinem Lizenzsystem rumschlagen müssen.

    Falls du es doch tun willst weiß ich nicht, was an der einfachen HTTP-Anfrage-Methode so falsch sein soll.

    Nein, das ist nicht nötig. Die Items der Seite k mit n Items pro Seite befinden sich wie gesagt an den Indizen im Intervall [n * k; (n * k) + n) (= von n * k bis ausgeschlossen (n * k) + n). Pseudo-Code, um die Items in das Inventar einzufügen:

    Code
    1. int page = ..., pageSize = ...
    2. int offset = page * pageSize
    3. ItemStack items[] = ...
    4. for (int i = 0; i < pageSize; i++) putItem(i, items[offset + i])

    Du weißt, dass du n Elemente auf einer Seite hast. Denkt man etwas nach, so kommt man auf den Gedanken, dass das erste Item einer Seite k beim Index n * k liegt. Daher befinden sich die Indize aller Elemente einer Seite im Intervall [n * k; (n * k) + n). Der Rest sollte nicht mehr schwierig sein.

    Das Beispiel der API-Dokumentation gibt einen curl-Command an. Wenn du also wissen willst, wie du Daten an die API sendest musst, kannst du das tun, indem du heraussuchst, was der curl-Command mit diesen Parametern macht. Dafür sieht man sich die Dokumentation an und findet für den F-Parameter folgendes und für für den d-Parameter dieses hier. Damit sollte klar sein, was für Daten du versenden musst, die Umsetzung überlasse ich aber nochmal dir.