Skip to content


Alterar SQLite on the fly

Olá pessoal, hoje o post foi uma necessidade do meu amigo Victor, então ele compartilhou sua solução e eu achei interessante deixar gravado aqui no blog, pois pode ser muito útil, afinal trabalhamos com informática, né 🙂

Alterar um banco de dados em produção é sempre tenso, então o Victor criou uma solução para isso.

Temos que criar dois métodos, um para saber qual a versão do SQLite e outro para incrementar essa versão.

Após realizar a alteração, incrementamos a versão da base e para saber se é preciso rodar o script de alter table na versão atual, verificamos a versão do banco.

Se quiserem sugerir otimizações, fiquem a vontade!!

- (int)getUserVersion
{
    static sqlite3_stmt *stmt_version;
    sqlite3 *database;

    int databaseVersion;

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
    {
        if(sqlite3_prepare_v2(database, "PRAGMA user_version;", -1, &stmt_version, NULL) == SQLITE_OK)
        {
            while(sqlite3_step(stmt_version) == SQLITE_ROW)
                databaseVersion = sqlite3_column_int(stmt_version, 0);

            NSLog(@"%s: the databaseVersion is: %d", __FUNCTION__, databaseVersion);
        }
        else
            NSLog(@"%s: ERROR Preparing: , %s", __FUNCTION__, sqlite3_errmsg(database));

        sqlite3_finalize(stmt_version);
        sqlite3_close(database);
    }
    return databaseVersion;
}

- (void)incrementUserVersion:(int)newVersion
{
    static sqlite3_stmt *stmt_version;
    sqlite3 *database;

    const char *newPragmaVersion = [[NSString stringWithFormat:@"PRAGMA user_version = %d;", newVersion] UTF8String];

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
    {
        if(sqlite3_prepare_v2(database, newPragmaVersion, -1, &stmt_version, NULL) == SQLITE_OK)
            sqlite3_step(stmt_version);
        else
            NSLog(@"%s: ERROR Preparing: , %s", __FUNCTION__, sqlite3_errmsg(database));

        sqlite3_finalize(stmt_version);
        sqlite3_close(database);
    }
}

Espero que tenha ajudado, enjoy e até a próxima!
Victor, obrigado pela contribuição, grande abraço!

Posted in Dev, Dicas, iOS, Mobile.

Tagged with , , , , , , , , , .


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.

(Spamcheck Enabled)