sql >> Databasteknik >  >> RDS >> Mysql

snabb synkroniseringsdata av kärndata en mysql-databas

Det finns inget snabbaste sätt men jag kan definitivt föreslå något som fungerar för mig. Bäst eller inte - det är upp till dig att avgöra.

Din fråga är också mycket generisk - eftersom den omfattar hela backend-infrastrukturen för en mobilapp. Jag ska försöka vara så specifik jag kan -

1) Gör en http-postbegäran till en php-fil, som väljer all data i mysql-databasen och ger resultatet tillbaka till appen -

När du har fått resultatet kan du analysera det i kärndata som exemplet nedan -

    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) Kontrollera vilka data som finns i kärndata => inget att göra, och vilka data som är nya => spara de nya uppgifterna i kärndata -

Du kan göra bra ol head call med en tidsstämpel och kontrollera om data har uppdaterats. Om data har uppdaterats - det kan bli lite knepigt att uppdatera individuella Core Data-attribut. Det som alltid har fungerat för mig är att ta bort SQLITE-backend på enheten och köra dataskrivningsmetoden igen. Du kan använda exemplet nedan -

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}
        }

    }

Efter det kan du köra writeDataToSqlieStore() metod igen.

Hoppas det hjälper.




  1. Uppdatera eller infoga (flera rader och kolumner) från underfråga i PostgreSQL

  2. En introduktion till fulltextsökning i MariaDB

  3. Hur Radians()-funktionen fungerar i PostgreSQL

  4. MySQL-fel vid försök att trunkera tabellen