sql >> Database teknologi >  >> RDS >> Mysql

hurtig synkronisering af kernedata og mysql-database

Der er ingen hurtigste måde, men jeg kan helt sikkert foreslå noget, der virker for mig. Bedst eller ej - det er op til dig at afgøre.

Også dit spørgsmål er meget generisk - da det omfatter hele backend-infrastrukturen i en mobilapp. Jeg vil prøve at være så specifik som jeg kan -

1) Lav en http post-anmodning til en php-fil, som vælger alle data i mysql-databasen og giver resultatet tilbage til appen -

Når du har modtaget resultatet, kan du parse det i kernedata som eksemplet nedenfor -

    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) Tjek hvilke data der findes i kernedata => intet at gøre, og hvilke data der er nye => gem de nye data i kernedata -

Du kan lave et godt hovedopkald med et tidsstempel og tjekke, om dataene er blevet opdateret. Hvis dataene er blevet opdateret - kan det blive lidt vanskeligt at opdatere individuelle Core Data-attributter. Det, der altid har virket for mig, er at slette SQLITE-backend'en på enheden og køre dataskrivningsmetoden igen. Du kan bruge eksemplet nedenfor -

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

    }

Derefter kan du køre writeDataToSqlieStore() metode igen.

Håber det hjælper.




  1. SQL Firewalling gjort let med ClusterControl &ProxySQL

  2. Sådan opretter du befolket MySQL Docker Image på byggetid

  3. PHP &MySql tjek om tabellen er tom

  4. Dynamisk mailkonfiguration med værdier fra databasen [Laravel]