sql >> Database >  >> RDS >> Mysql

snelle synchronisatiegegevens van kerngegevens en mysql-database

Er is geen snelste manier, maar ik kan zeker iets aanbevelen dat voor mij werkt. Beste of niet - het is aan jou om te beslissen.

Ook uw vraag is erg generiek - aangezien deze de volledige backend-infrastructuur van een mobiele app omvat. Ik zal proberen zo specifiek mogelijk te zijn -

1) Doe een http-postverzoek naar een php-bestand, dat alle gegevens van de mysql-database selecteert en het resultaat teruggeeft aan de app -

Zodra u het resultaat heeft ontvangen, kunt u het in kerngegevens ontleden, zoals in het onderstaande voorbeeld -

    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) Controleer welke gegevens in kerngegevens aanwezig zijn => niets te doen en welke gegevens nieuw zijn => sla de nieuwe gegevens op in kerngegevens -

U kunt een goede oude hoofdoproep doen met een tijdstempel en controleren of de gegevens zijn bijgewerkt. Als de gegevens zijn bijgewerkt, kan het een beetje lastig zijn om individuele kerngegevensattributen bij te werken. Wat voor mij altijd heeft gewerkt, is het verwijderen van de SQLITE-backend op het apparaat en het opnieuw uitvoeren van de gegevensschrijfmethode. U kunt het onderstaande voorbeeld gebruiken -

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

    }

Daarna kunt u de writeDataToSqlieStore() . uitvoeren methode opnieuw.

Ik hoop dat dat helpt.




  1. mysql pivoting - hoe kan ik gegevens uit dezelfde tabel in verschillende kolommen ophalen?

  2. ORDER OP Kleur met Hex Code als criterium in MySQL

  3. Hoe een .Net-toepassing te schrijven die werkt met zowel SqlServer als Oracle (nu System.Data.OracleClient is verouderd)

  4. Het eerste teken DISTINCT van een veld retourneren (MySQL)