最近开发的软件涉及到sqlite版本升级问题即修改数据结构
处理app升级之后sqlite数据机构的改变主要有以下三种方法
第一种方法:直接判断数据库中的要改变数据结构的table是否存在要修改或者要删除或者要添加的字段,接下来改修改的修改、改删除的删除、改添加的添加(不建议);
第二种方法:在app本地存储sqlite数据库的版本,根据版本号判断,改修改的修改、改删除的删除、改添加的添加(不建议);
第三种方法:直接使用fmdb第三方库;
第四种方法:直接设置sqlite数据库的版本(也是我使用的方法),代码如下:
打开数据库之后:读取sqlite版本号
+(int)queryUserVersion: (sqlite3*) db {
// get current database version of schema
static sqlite3_stmt *stmt_version;
int databaseVersion;
if(sqlite3_prepare_v2(db, "PRAGMA user_version;", -1, &stmt_version, NULL) == SQLITE_OK) {
while(sqlite3_step(stmt_version) == SQLITE_ROW) {
databaseVersion = sqlite3_column_int(stmt_version, 0);
DebugLog(@"version %d", databaseVersion);
}
// DebugLog(@"the databaseVersion is: %d", databaseVersion);
} else {
DebugLog(@"ERROR Preparing: , %s", sqlite3_errmsg(db) );
}
sqlite3_finalize(stmt_version);
return databaseVersion;
}
然后将升级版的app的sqlite数据库版本与之前的进行比较,接下来该修改的修改、改删除的删除、改添加的添加。
以上操作完成之后在设置给sqite数据库设置心的版本号,一下是设置数据库版本号的代码
char *errorMsg = NULL;
if (sqlite3_exec(_db, [tString1 UTF8String], nil, nil, &errorMsg)!= SQLITE_OK) {
DebugLog(@"%s" , errorMsg);
}
以上若有不正确之处,欢迎指正