Mysql
 sql >> Datenbank >  >> RDS >> Mysql

schnelle Synchronisierung von Kerndaten mit einer MySQL-Datenbank

Es gibt keinen schnellsten Weg, aber ich kann definitiv etwas vorschlagen, das für mich funktioniert. Das Beste oder nicht – Sie müssen entscheiden.

Außerdem ist Ihre Frage sehr allgemein, da sie die gesamte Backend-Infrastruktur einer mobilen App umfasst. Ich werde versuchen, so genau wie möglich zu sein -

1) Stellen Sie eine HTTP-Post-Anforderung an eine PHP-Datei, die alle Daten der MySQL-Datenbank auswählt und das Ergebnis an die App zurückgibt -

Sobald Sie das Ergebnis erhalten haben, können Sie es wie im Beispiel unten in Core Data parsen –

    func writeDataToSqliteStore() throws {

                // Configure the Network Call here with NSURL & NSData returning an array that you can write to the Core Data SQLITE backend.
            do {
                jsonResponse = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as? NSArray
            } catch {
                print(error)
            }
                let localEntity = self.insertNewEntity("EntityName") as? CoreDataEntityClass

                for singleObject in jsonResponse {

                    localEntity.name = singleObject.valueForKey("name")
                    localEntity.address = singleObject.valueForKey("address")
            }
  }

2) Prüfen, welche Daten in Stammdaten vorhanden sind => nichts zu tun, und welche Daten neu sind => neue Daten in Stammdaten speichern -

Sie können einen guten Anruf mit einem Zeitstempel machen und prüfen, ob die Daten aktualisiert wurden. Wenn die Daten aktualisiert wurden, kann es etwas schwierig werden, einzelne Kerndatenattribute zu aktualisieren. Was bei mir immer funktioniert hat, ist das Löschen des SQLITE-Backends auf dem Gerät und das erneute Ausführen der Datenschreibmethode. Sie können das Beispiel unten verwenden -

func removeSQLITEFiles() {
    let fileManager = NSFileManager.defaultManager()
        let URL1 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite")
        let URL2 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite-wal")
        let URL3 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite-shm")

        if fileManager.fileExistsAtPath(URL1.path!) {
            do {
             try fileManager.removeItemAtURL(URL1)
            }
            catch {error}
        }

        if fileManager.fileExistsAtPath(URL2.path!) {
            do {
                try fileManager.removeItemAtURL(URL2)
            }
            catch {error}
        }

        if fileManager.fileExistsAtPath(URL3.path!) {
            do {
                try fileManager.removeItemAtURL(URL3)
            }
            catch {error}
        }

    }

Danach können Sie writeDataToSqlieStore() ausführen Methode erneut.

Hoffe das hilft.