SQLite Datensatz abfragen und gegebenenfalls ändern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SQLite Datensatz abfragen und gegebenenfalls ändern

    Hallo ,

    kann mir wer einen tipp geben wie ich bei meinem SQlite Datenbank Update in der Datenbank nachsehen kann ob ein eintrag vorhanden ist, und wenn er da ist ihn mit einer NULL beschreiben.
    Wenn nicht vorhanden die daten des Updates verwenden.

    SELECT * FROM restaurants WHERE restaurantId = ?

    so in der art oder , wie kann ich das im xcode lösen?

    Danke
  • Das einfachste wäre einfach ein Update auf NULL. Ist er da, wird er auf NULL gesetzt.
    UPDATE restaurants SET restaurants.spaltenname=NULL WHERE restaurantId = 2;

    Ansonsten hört sich das ein wenig konfus an. Du solltest vielleicht mal genau beschreiben, was Du vorhast.
    Auch deine Aussage „wenn ein Datenbankeintrag vorhanden ist, ihn mit NULL beschreiben“ ist merkwürdig. Du kannst ein Feld/Spalte auf NULL setzen, aber keinen Datenbankeintrag.

    Ansonsten per COUNT(*) gucken, ob ID vorhanden ist und danach dann gegebenenfalls ein Update. <- aber das ist ja unnötig (s. o.)

    Ums vorweg zu nehmen. Irgenwie müssen ja die Daten, die Du holst (das Update) in deine Datenbank irgendwann kommen.
    Also warum nicht einfach alle Datensätze aktualisieren (in der SQLite-DB) und dann die Abfrage nach einem bestimmten Datensatz starten.

    Das ist viel sauberer.
  • sorry für meine beschreibung

    so, ich lösche in meinem App ein Foto dessen path in der datenbank steht, im selben zuge beschreibe ich es mit einem anderen path bzw schreibe eine 0 in die Datenbank.

    wenn ich jetzt ein update bekomme und die 0 bereits gesetzt ist möchte ich es nicht wieder Updaten, ist die 0 nicht vorhanden schreibe ich die daten vom update in die DB.

    huii ich hoffe es hilft mich zu verstehen

    danke
  • Immernoch etwas unklar. Weil ich das Problem nicht verstehe.

    Warum löst dieser Query nicht dein Problem?

    Du holst das Update, entweder ist für eine bestimmte ID ein Pfad gesetzt dann
    holst Du Dir den Pfad vom alten Bild, löscht das Bild und aktualisierst die Daten mit neuem Pfad

    UPDATE restaurants SET restaurants. path=NeuerWert WHERE restaurantId = x;



    oder


    in deinem Update gibt es kein Bild für die ID, dann
    holst Du Dir den Pfad vom alten Bild
    vorhanden: altes Bild löschen, Pfad auf 0 setzen.
    keiner vorhanden: weiter gehts.


    Nebenbei: NULL!=0
  • hmm, einfach gesagt , der user löscht ein foto, ist es gelöscht muss es auch so bleiben, aber beim nächsen update da ich ja nicht weis wer es gelöscht hat oder nicht ist es wieder dabei und sichtbar, deswegen möchte ich abfragen ob es gelöscht wurde oder nicht, und je nachdem die daten in die db schreiben.

    oder kann ich einen wert in den NSUserDefaults Speciher und es meinem Server senden ? aber was mach ich wenn kein Internet vorhanden ist ?

    Danke
  • NSUserDefaults / SQLite ... wie denn nun?


    egal. Wenn Du jedem Item die Eigenschaft UserMod (Integer, unsigned und als Bool verwendest) gibts und bei jedem Userändern
    diese Eigenschaft auf 1 setzt, kannst Du doch ganz einfach ein Update mit WHERE UserMod=0 durchführen. Dann aktualisierst Du nur die nicht vom User angefassten Datensätze.


    Aber es hört sich so an, als wenn Du Dir überhaupt noch nicht sicher bist, wie Du überhaupt vorgehen möchtest.


    Zum Internet... ja lokal speichern /coredata/sqlite oder von mir aus in die NSUserDefaults. <- NSUserDefaults sind aber eigentlich nur für die Einstellungen deiner App gedacht.
    Apropos: „was mach ich, wenn kein Internet vorhanden ist“ auf jeden Fall kannst Du dann auch kein Update durchführen.
  • pack doch einfach eine INTEGER spalte "deleted" dazu.

    beim löschen:

    "UPDATE tabelle SET deleted = 1 WHERE restaurantId = %u;", RESTAURANT_ID

    beim updaten:

    "UPDATE tabelle SET path = '%@' WHERE deleted = 0 AND restaurantId = %u;", NEW_PATH, RESTAURANT_ID

    edit: natürlich kannst du statt dem "deleted" auch eifnach NULL in path reinschreiben und nachher wieder in die AND path IS NOT NULL rein.
  • @ zweimenschen

    Ja ich suche halt nach einer lösung die ich erstens technisch auch packe, solang mach ich das ja noch nicht ;) und auch gut läuft ohne probleme zu machen.

    Das wenn kein Internet kein Update ist mir schon klar, aber ich kann ja wohl irgendwie abfragen ob netz da ist und wenn ja meine daten dem server übergeben , oder geht das nicht ?

    @ gritsch

    Perfekt, danke für den Tipp !
  • ja, das kannst Du abfragen, auch was für eine Internetverbindung vorhanden ist (es gibt ja mehrere Möglichkeiten)

    Ansonsten: Gritsch hat genau das gleiche geschrieben wie ich. Nur das Feld anders benannt.
    Ich habs UserMod genannt, weil es unter Umständen ja auch andere Veränderungen geben kann als nur das Bild zu löschen. **will auch ein lob**