SQLite speichert Insert nicht

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

  • SQLite speichert Insert nicht

    Ich grüße euch,

    ich taste mich Schritt für Schritt in die iOS-Programmierwelt hinein und stehe nun vor einem (kleinen) Problem ?(

    Ich habe eine kleine Kontakt-App erstellt (um mich mit der Programmierumgebung vertrauter zu machen) und möchte etwas in meine SQLite-Datenbank eintragen.
    Dazu habe ich mir folgenden Methode geschrieben:

    Quellcode

    1. - (void)uniqueId:(NSString *)unId nameText:(NSString *)name addressText:(NSString *)text
    2. {
    3. sqlite3_stmt *statement;
    4. if (sqlite3_open([sqliteDb UTF8String], &database) == SQLITE_OK) {
    5. NSString *insertSQL = [NSString stringWithFormat:
    6. @"INSERT INTO person (uniqueId, name, address) VALUES ("%@", "%@", "%@")",
    7. unId, name, text];
    8. const char *insert_stmt = [insertSQL UTF8String];
    9. sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL);
    10. if (sqlite3_step(statement) == SQLITE_DONE) {
    11. NSLog(@"Person inserted.");
    12. } else {
    13. NSLog(@"Error");
    14. }
    15. sqlite3_finalize(statement);
    16. }
    17. }
    Alles anzeigen


    Das klappt auch so ganz wunderbar, wenn ich jedoch die App schließe und sie erneut öffne dann sind die Einträge weg :cursing:.
    Wie stelle ich es an das die Einträge in meiner SQLite-Datenbank gespeichert bleiben damit die beim nächsten Aufruf der App wieder vorhanden sind?

    Ich hoffe ich konnte mein Problemchen gut darstellen :thumbsup:, weil ich schon viele Varianten ausprobiert habe, jedoch auch im Internet nichts diversen gefunden habe :pinch:.

    Liebe Grüße
  • Zeichenketten in SQL haben das Apostroph als Begrenzer.


    Das habe ich geändert :).

    Also wie gesagt er fügt alles normal ein:

    2013-08-03 16:25:11.585 TestSql[5123:c07] 1 - Lukas Podolski - Arsenal
    2013-08-03 16:25:11.585 TestSql[5123:c07] 2 - Marco Reus - Dortmund
    2013-08-03 16:25:11.586 TestSql[5123:c07] 3 - Mario Götze - München
    2013-08-03 16:25:11.586 TestSql[5123:c07] 4 - Stefan Kießling - Leverkusen


    Aber er speichert es nicht. Kann ja auch sein das ich irgendwas vergessen habe.

    Habe noch

    Quellcode

    1. sqlite3_close(database);


    unter

    Quellcode

    1. sqlite3_finalize(statement);


    eingefügt, aber hat auch nichts gebracht ^^
  • jopjip schrieb:

    Hast du mal geprüft, ob die Einträge wirklich in der Datenbank gelandet sind bzw. der Content. So ein Log-Auszug ist nämlich bei so einem Problem kein Stück aussagekräftig, da der Code zwar ausgeführt wurde, aber der Spaß nicht in der Datenbank angekommen ist.


    aaaaha, tut er nämlich nicht :cursing:
    jetzt dann werde ich nochmal gut über den code schauen um das richtig zu stellen
  • Hast Du Schreibrechte auf die DB?

    Wenn die DB nur im Main bundle steht, wird das so nichts. Da ist die nur read only

    Du musst die DB vor dem bearbeiten in documents kopieren, dann kannst Du auch rein schreiben....
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hape42 ()

  • hape42 schrieb:

    Hast Du Schreibrechte auf die DB?

    Wenn die DB nur im Main bundle steht, wird das so nichts. Da ist die nur read only

    Du musst die DB vor dem bearbeiten in documents kopieren, dann kannst Du auch rein schreiben....



    Wie genau meinst du das?
    Ich habe die sqlite3 Datei unter "Supporting Files" gezogen & "Copy items into destination group's folder (if needed)" ausgewählt und "Add to targets" mein Projekt ausgewählt.
  • Danke danke danke für den Hinweis :love:

    Deswegen stellt man ja gerne Fragen um dazu zu lernen :rolleyes:

    Ich habe das Problem nun gelöst und es geht einwandfrei.

    Wer irgendwann mal auf das selbe Problem stoßen sollte dem kann ich diese Seite empfehlen:

    iosdevgermany.de/tutorial/sqli…tenbanken-auf-dem-iphone/

    Im nächsten Schritt (Zeile 7-13) kopieren wir die Datenbank aus dem Main-Bundle in diese Documents-Directory. Das Main-Bundle enthält bspw. Bilder, die man für einen UIImageView benötigt. Man fügt Dateien zum Main-Bundle hinzu, indem man sie in den Projekt-Ordner kopiert. Das haben wir vorhin auch mit unserer shoppinglist-Datenbank gemacht. Das Problem ist allerdings, das alle Dateien im Main-Bundle readonly sind. Das bedeutet, es wäre nicht möglich, neue Einkaufsgegenstände zur Liste hinzuzufügen, da die Datenbank nicht bearbeitet werden dürfte. Das ist der Grund, warum wir die Datenbank aus dem Main-Bundle heraus in die Documents-Directory kopieren.



    Ich danke euch für eure Hilfe, bestimmt mal bis demnächst :D