SQLite Update / nicht alles überschreiben ?

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

  • SQLite Update / nicht alles überschreiben ?

    Hallo Team,

    Ich hab in meiner App eine SQLite DB, ( es funktioniert alles bestens ) nur ;) Ich lese ein XML file in die Datenbank ein, alles passt . nach dem update sind 100 Datensätze vorhanden, wenn ich jetzt ein weiteres update mache aus dem aber nur 3 Datensätze hervor gehen überschreib ich meine Datenbank und
    es sind nicht wie gewünscht 103 Sätze vorhanden sondern nur mehr 3. Ich würde gerne meine Datenbank Updaten und nicht immer neu schreiben.
    Ich verwende folgenden code zum beschreiben der DB.

    Quellcode

    1. -(BOOL)updateDB:(int)index
    2. {
    3. const char *strQuery;
    4. NSString* db_path = [DOCS_FOLDER stringByAppendingPathComponent:DB_NAME];
    5. sqlite3 *database;
    6. sqlite3_stmt *statement = nil;
    7. if (sqlite3_open([db_path UTF8String], &database) == SQLITE_OK) {
    8. strQuery = "INSERT INTO restaurants(restaurantId, name, address, suburb, latitude, longitude, phone_number, website, description, customId, postcode, email, prempage, camlogo) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    9. sqlite3_prepare_v2(database, strQuery, -1, &statement, NULL);
    10. sqlite3_bind_int(statement, 1, index);
    11. sqlite3_bind_text(statement, 2, [self.m_title UTF8String], -1, SQLITE_TRANSIENT);
    12. sqlite3_bind_text(statement, 3, [self.subtitle UTF8String], -1, SQLITE_TRANSIENT);
    13. sqlite3_bind_text(statement, 4, [self.suburb UTF8String], -1, SQLITE_TRANSIENT);
    14. sqlite3_bind_double(statement, 5, self.d_latitude);
    15. sqlite3_bind_double(statement, 6, self.d_longitude);
    16. sqlite3_bind_text(statement, 7, [self.phone UTF8String], -1, SQLITE_TRANSIENT);
    17. sqlite3_bind_text(statement, 8, [self.website UTF8String], -1, SQLITE_TRANSIENT);
    18. sqlite3_bind_text(statement, 9, [self.description UTF8String], -1, SQLITE_TRANSIENT);
    19. sqlite3_bind_text(statement, 10, [self.customId UTF8String], -1, SQLITE_TRANSIENT);
    20. sqlite3_bind_text(statement, 11, [self.postcode UTF8String], -1, SQLITE_TRANSIENT);
    21. sqlite3_bind_text(statement, 12, [self.email UTF8String], -1, SQLITE_TRANSIENT);
    22. sqlite3_bind_text(statement, 13, [self.prempage UTF8String], -1, SQLITE_TRANSIENT);
    23. sqlite3_bind_text(statement, 14, [self.camlogo UTF8String], -1, SQLITE_TRANSIENT);
    24. sqlite3_step(statement);
    25. sqlite3_finalize(statement);
    26. sqlite3_close(database);
    27. }
    28. return NO;
    29. }
    Alles anzeigen


    danke für eure hilfe
  • Kein Neuer Eintrag

    so das erste problem hätt ich somit gelöst alle einträge bleiben erhalten, wenn ich jetzt einen neuen einlese wird er aber nicht mit in die DB aufgenommen, ich muss der DB doch irgend wie vom XML file eine Id mitgeben damit er es zuordnen kann oder?
    meine xml sieht so aus, spich ein datensatz.

    Quellcode

    1. <dict><key>customer</key><string>test eintrag wegen update</string><key>adresse</key><string>testatrAAE 35</string><key>subtitle</key><string>1010 wien</string><key>telefonnummer</key><string/><key>homepage</key><string/><key>opentime</key><string/><key>customid</key><string>156</string><key>zipcode</key><string>1010</string><key>email</key><string/><key>prempage</key><string>100</string><key>camlogo</key><string>0</string><key>latitude</key><real>48.919876</real><key>longitude</key><real>14.261765</real></dict>
  • Das ganze muss doch hier zu machen sein oder ? in meiner SQLite DB ( im App. ) ist die Restaurantid automatisch von 1 - xxx . ich hab aber eine eigene in meiner Server MySql DB die ich denk ich mal übernehmen muss.

    Quellcode

    1. strQuery = "INSERT INTO restaurants(restaurantId, xxxxx, camlogo) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    2. sqlite3_prepare_v2(database, strQuery, -1, &statement, NULL);
    3. sqlite3_bind_int(statement, 1, index);


    ich denk mal das dass ganze hier zu lösen ist, kann mir da wer helfen ?

    danke
  • Problem Gelöst!

    Ich hab jetzt die ID`s von der Server MySql DB mit der SQLite vom App angeglichen..

    Quellcode

    1. sqlite3_prepare_v2(database, strQuery, -1, &statement, NULL);
    2. sqlite3_bind_text(statement, 1, [self.restaurantId UTF8String], -1, SQLITE_TRANSIENT);


    Danke für euer hilfe....
  • DB updates haben kein schreibrecht ?

    so jetzt ist doch noch ein problem aufgetaucht. das DB einlesen und Update dazu schreiben passt bestens, nur wenn ich jetzt eine Datensatz änderung habe wird diese nicht angenommen, bzw. der alte Datensatz wird nicht überschieben.
    was muss ich ändern um diesen efekt zu bekommen, das INSERT ...... UPDATE restaurants SET ?

    Quellcode

    1. -(BOOL)updateDB:(int)index
    2. {
    3. const char *strQuery;
    4. NSString* db_path = [DOCS_FOLDER stringByAppendingPathComponent:DB_NAME];
    5. sqlite3 *database;
    6. sqlite3_stmt *statement = nil;
    7. if (sqlite3_open([db_path UTF8String], &database) == SQLITE_OK) {
    8. strQuery = "INSERT INTO restaurants(restaurantId, name, address, suburb, latitude, longitude, phone_number, website, description, customId, postcode, email, prempage, camlogo) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    9. //NSLog(@"%@",strQuery);
    10. sqlite3_prepare_v2(database, strQuery, -1, &statement, NULL);
    11. sqlite3_bind_text(statement, 1, [self.restaurantId UTF8String], -1, SQLITE_TRANSIENT);
    12. sqlite3_bind_text(statement, 2, [self.m_title UTF8String], -1, SQLITE_TRANSIENT);
    13. sqlite3_bind_text(statement, 3, [self.subtitle UTF8String], -1, SQLITE_TRANSIENT);
    14. sqlite3_bind_text(statement, 4, [self.suburb UTF8String], -1, SQLITE_TRANSIENT);
    15. sqlite3_bind_double(statement, 5, self.d_latitude);
    16. sqlite3_bind_double(statement, 6, self.d_longitude);
    17. sqlite3_bind_text(statement, 7, [self.phone UTF8String], -1, SQLITE_TRANSIENT);
    18. sqlite3_bind_text(statement, 8, [self.website UTF8String], -1, SQLITE_TRANSIENT);
    19. sqlite3_bind_text(statement, 9, [self.description UTF8String], -1, SQLITE_TRANSIENT);
    20. sqlite3_bind_text(statement, 10, [self.customId UTF8String], -1, SQLITE_TRANSIENT);
    21. sqlite3_bind_text(statement, 11, [self.postcode UTF8String], -1, SQLITE_TRANSIENT);
    22. sqlite3_bind_text(statement, 12, [self.email UTF8String], -1, SQLITE_TRANSIENT);
    23. sqlite3_bind_text(statement, 13, [self.prempage UTF8String], -1, SQLITE_TRANSIENT);
    24. sqlite3_bind_text(statement, 14, [self.camlogo UTF8String], -1, SQLITE_TRANSIENT);
    25. // sqlite3_bind_text(statement, 1, [self.restaurantid UTF8String], -1, SQLITE_TRANSIENT);
    26. sqlite3_step(statement);
    27. sqlite3_finalize(statement);
    28. sqlite3_close(database);
    29. }
    30. return NO;
    31. }
    Alles anzeigen
  • Wie wär es wenn du einfach mal die Rückgabewerte der sqlite Befehle abfragst und ein paar Fehlerabfragen einbaust? Dann sagt einem sqlite nämlich normalerweise ganz genau was fehlgeschlagen ist.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Ich ernenne Gritsch hiermit zum offiziellen SQLite-Manual.

    Oh Mann sowas kann man nun wirklich auch mal selber durchlesen bevor man hier fragt.

    hallo , das ist mir auch klar, aber eigentlich dachte ich das für fragen ein forum da ist , naja. meine frage war viel mehr wie ich das in xcode umstetzen kann wenn ich von extern mit einem update einen club löschen möchte.
  • snuffyDEV schrieb:

    Thallius schrieb:

    Ich ernenne Gritsch hiermit zum offiziellen SQLite-Manual.

    Oh Mann sowas kann man nun wirklich auch mal selber durchlesen bevor man hier fragt.

    hallo , das ist mir auch klar, aber eigentlich dachte ich das für fragen ein forum da ist , naja. meine frage war viel mehr wie ich das in xcode umstetzen kann wenn ich von extern mit einem update einen club löschen möchte.


    lass deine app einfach beim starten den server fragen welche clubs gültig sind. falls neue vorhanden dann kommen die dazu, andernfalls eben löschen.
  • das mach ich ja nur wies ich nicht wie ich das im app verwenden soll, ich hab in einer spalte ( deleted ) bei 0 ist ok setz ich ihn auf 1 wird der club gelöscht. ich hab es damit versucht aber geht nicht ganz :( was mach ich falsch ?

    Quellcode

    1. -(BOOL)updateDB:(int)index
    2. {
    3. const char *strQuery;
    4. NSString* db_path = [DOCS_FOLDER stringByAppendingPathComponent:DB_NAME];
    5. sqlite3 *database;
    6. sqlite3_stmt *statement = nil;
    7. if (sqlite3_open([db_path UTF8String], &database) == SQLITE_OK) {
    8. //// versuch 1
    9. strQuery = "DELETE FROM restaurants WHERE restaurantId = ?";
    10. sqlite3_prepare_v2(database, strQuery, -1, &statement, NULL);
    11. sqlite3_bind_text(statement, 1, [self.restaurantId UTF8String], -1, SQLITE_TRANSIENT);
    12. sqlite3_step(statement);
    13. sqlite3_finalize(statement);
    14. *statement = nil;
    15. if([self.deleted UTF8String] != "1") {
    16. /////
    17. strQuery = "INSERT OR REPLACE INTO restaurants (restaurantId, name, address, suburb, latitude, longitude, phone_number, website, description, customId, postcode, email, prempage, camlogo, deleted) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    18. sqlite3_prepare_v2(database, strQuery, -1, &statement, NULL);
    19. sqlite3_bind_text(statement, 1, [self.restaurantId UTF8String], -1, SQLITE_TRANSIENT);
    20. sqlite3_bind_text(statement, 2, [self.m_title UTF8String], -1, SQLITE_TRANSIENT);
    21. sqlite3_bind_text(statement, 3, [self.subtitle UTF8String], -1, SQLITE_TRANSIENT);
    22. sqlite3_bind_text(statement, 4, [self.suburb UTF8String], -1, SQLITE_TRANSIENT);
    23. sqlite3_bind_double(statement, 5, self.d_latitude);
    24. sqlite3_bind_double(statement, 6, self.d_longitude);
    25. sqlite3_bind_text(statement, 7, [self.phone UTF8String], -1, SQLITE_TRANSIENT);
    26. sqlite3_bind_text(statement, 8, [self.website UTF8String], -1, SQLITE_TRANSIENT);
    27. sqlite3_bind_text(statement, 9, [self.description UTF8String], -1, SQLITE_TRANSIENT);
    28. sqlite3_bind_text(statement, 10, [self.customId UTF8String], -1, SQLITE_TRANSIENT);
    29. sqlite3_bind_text(statement, 11, [self.postcode UTF8String], -1, SQLITE_TRANSIENT);
    30. sqlite3_bind_text(statement, 12, [self.email UTF8String], -1, SQLITE_TRANSIENT);
    31. sqlite3_bind_text(statement, 13, [self.prempage UTF8String], -1, SQLITE_TRANSIENT);
    32. sqlite3_bind_text(statement, 14, [self.camlogo UTF8String], -1, SQLITE_TRANSIENT);
    33. sqlite3_bind_text(statement, 15, [self.deleted UTF8String], -1, SQLITE_TRANSIENT);
    34. sqlite3_step(statement);
    35. sqlite3_finalize(statement);
    36. }
    37. sqlite3_close(database);
    38. }
    39. return NO;
    40. }
    Alles anzeigen