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

sincronizzazione rapida dei dati dei dati principali di un database mysql

Non esiste un modo più rapido, ma posso sicuramente suggerire qualcosa che funziona per me. Meglio o no:sta a te decidere.

Anche la tua domanda è molto generica, poiché comprende l'intera infrastruttura di back-end di un'app mobile. Cercherò di essere il più specifico possibile -

1) Fai una richiesta di post http a un file php, che seleziona tutti i dati del database mysql e restituisce il risultato all'app -

Una volta ricevuto il risultato, puoi analizzarlo in Core Data come nell'esempio seguente -

    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) Controlla quali dati esistono nei dati principali => niente da fare e quali dati sono nuovi => salva i nuovi dati nei dati principali -

Puoi fare una buona chiamata di testa con un timestamp e controllare se i dati sono stati aggiornati. Se i dati sono stati aggiornati, potrebbe essere un po' complicato aggiornare i singoli attributi dei dati principali. Ciò che ha sempre funzionato per me è eliminare il backend SQLITE sul dispositivo ed eseguire nuovamente il metodo di scrittura dei dati. Puoi utilizzare l'esempio seguente -

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

    }

Dopodiché puoi eseguire writeDataToSqlieStore() metodo di nuovo.

Spero di esserti stato d'aiuto.