Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

dados de sincronização rápida de dados principais de um banco de dados mysql


Não existe uma maneira mais rápida, mas posso definitivamente sugerir algo que funcione para mim. Melhor ou não - cabe a você decidir.

Além disso, sua pergunta é muito genérica - pois abrange toda a infraestrutura de back-end de um aplicativo móvel. Vou tentar ser o mais específico possível...

1) Faça uma solicitação http post para um arquivo php, que seleciona todos os dados do banco de dados mysql e devolve o resultado para o aplicativo -

Depois de receber o resultado, você pode analisá-lo no Core Data como no exemplo abaixo -
    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) Verifique quais dados existem nos dados principais => nada a fazer e quais dados são novos => salve os novos dados nos dados principais -

Você pode fazer uma boa chamada de cabeça com um Time Stamp e verificar se os dados foram atualizados. Se os dados foram atualizados - pode ser um pouco complicado atualizar os atributos individuais dos Core Data. O que sempre funcionou para mim é excluir o back-end SQLITE no dispositivo e executar o método de gravação de dados novamente. Você pode usar o exemplo abaixo -
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}
        }

    }

Depois disso, você pode executar o writeDataToSqlieStore() método novamente.

Espero que ajude.