SQLite prüfen, ob Datensatz mit Name schon existiert

A big new update is now available, introducing biomes, caves and much more!
Latest hotfix: 0.7.0.3 (2024-02-21)
  • Hallo @red51, Hallo @noci,


    kann mir mal einer sagen, wie ich in der SQLite herausbekomme, ob ein Datensatz bereits vorhanden ist?


    PreparedStatement pstmt;
    pstmt = connection.prepareStatement("SELECT ID, Name, PosX, PosY, PosZ, PosRX, PosRY, PosRZ FROM Warps WHERE Name=?");


    Es soll in der Tabelle Warps geprüft werden, ob Name bereits vorhanden ist.
    Wenn nicht, dann soll der mit der Position und Rotation des Spielers eingefügt werden.

  • in SQL nachtäglich ne Spalte hinzufügen?


    Ansonsten einmal auslesen, die Werte Vergleichen und dann Ändern.
    Du musst aber aufpassen SQL querys können nicht ineinander aufgerufen werden.


    Also erst DB Lesen und in Variablen Speichern, dabei kann auch schon geprüft und geändert werden. Un die gemerkten Daten in einem weiteren SQL Query Aktualiesieren (UPDATE SET ... genauer auf bau im Netzt)

  • Hi @noci,
    hab es mit Result versucht! Geht nicht.
    Warum geht das nicht?


    Das Plugin kommt bis zur Zeile 17. Dann will er irgendwie die Schleife nicht machen! ?(
    Zeile 26 kammt immer "false" raus! Egal ob WarpName bereits existiert oder nicht.

  • Beim Ersten Blick würde ich sagen das Zeile 26: if (name == null && !name.equals(cmd[1])), denn wenn kein Warp gefunden wurde name = NULL willst du ja eine neuen Erstellen und nur wennname != NULL ist ja ein eintrag vorhanden.

  • Wenn er nicht NULL zurück gibt wurde der Query erfolgreich ausgeführt, aber enthält keinen Inhalt der auf Next ausgeben kann. Das heist für mich Abfrage OK, 0 Zeilen zurück gegeben.
    Du hast aber Daten in der DB?


    Wenn du den, im SQLite-Browser Ausführst INSERT INTO Warps (WarpName, PosX, PosY, PosZ, PosRX, PosRY, PosRZ) VALUES ("Name", 0, 1, 2, 3, 4, 5);, macht er das Anstandslos?

  • Du hast aber Daten in der DB?

    Nein! Sie ist leer!

    Wenn du den, im SQLite-Browser Ausführst INSERT INTO Warps (WarpName, PosX, PosY, PosZ, PosRX, PosRY, PosRZ) VALUES ("Name", 0, 1, 2, 3, 4, 5);, macht er das Anstandslos?

    Ja!


    Schreib mir doch bitte einen Code, der Funktioniert. Dann kann ich aus dem Code lernen. Nur rumprobieren geht auch nicht.
    Habe dir auch in Skype geantwortet

  • OKe, das Problem blieb in Zeile 26.


    if (name != null && !name.equals(cmd[1])) { die Zeile muss zu if (!cmd[1].equals(name)) { abgeändert werden.


    Hier ist ein perfektes Beispiel warum und wofür es equels gibt.
    Der alte Vergleich cmd[1] == name setzt vor raus das beide Variablen Initialisiert sind und Werte besitzen. (wert voncmd[1] gleich wert vonname)
    Wobei die Funktion equals eine Prüfung von diesem Objekt aus, ausfürt. Im obigem Beispiel ist cmd[1]==[INPUT] und name==NULL. Damit wird bei name.equels(cmd[1]) versucht die Funktion equals von einem NULL-Strings zu öffnen(NULL hat keine SUB). Wobei cmd[1].equals(name) versucht die Funktion equals von einem Initialisierten Strings aus zu führen. (kein Problem), und wenn diese Funktion auf NULL Variable trift berücksichtigt sie auch diesen Zustand und gibt in diesem Beispiel false zurück.


    Weiterhin fehlen dann in der Zeile 13, 13.5 & 59 einige Anpassungen:
    if (cmd[0].toLowerCase().equals("/setwarp") && cmd[1] != null ) { bei einem Array Prüft Mann besser auf die Größe des Arreas als ob ein Wert NULL ist, da hier im Fehlerfall einer "leeren Eintrages" eher ein ArrayIndexOutOfBoundsException auslöst.


    Zeile 13 : if (cmd[0].toLowerCase().equals("/setwarp")) {
    Zeile 13.5: if (cmd.length>=2){
    Zeile 59 : } ^^


    :D


    EDIT: cmd[1]==[INPUT]

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!