在版本迭代过程中,以往的接口字段往往不能满足需求,为了项目需要,不得不增加字段,这种情况下就避免不了数据库升级的问题。如果直接修改表结构、数据库语句,会导致以前的版本不能用,休息时间写了个小demo,分享给大家。
demo地址:http://download.csdn.net/detail/qq_20176153/9871536
- (IBAction)inserDataClick:(id)sender {
UserModel *userModel = [[UserModel alloc] init];
userModel.ID = @"001";
userModel.name = @"李志强001";
userModel.age = @"25";
LZQManager *manager = [[LZQManager alloc] init];
[manager inserUser:userModel];
}
- (IBAction)newInserDataClickBtn:(id)sender {
UserModel *userModel = [[UserModel alloc] init];
userModel.ID = @"0010";
userModel.name = @"李志强0010";
userModel.age = @"35";
userModel.sex = @"1";
LZQManager *manager = [[LZQManager alloc] init];
[manager inserUser:userModel];
}
/**
* 创建数据表
* 创建表时字段有三个:ID,AGE,NAME
*/
- (void)createSqliteTable
{
NSString *creatTable =@"CREATE TABLE IF NOT EXISTS Message(ID TEXT, AGE TEXT, NAME TEXT)";
[_databaseQueueinDatabase:^(FMDatabase *db) {
[db executeUpdate:creatTable];
}];
}
/**
* 插入数据
* 插入模型字段有四个属性: ID,AGE,NAME,SEX
*/
- (void)inserUser:(UserModel *)userModel
{
NSString *judgeSql =@"SELECT * FROM Message WHERE ID = ?";
NSString *insertSql =@"INSERT INTO Message(ID,AGE,NAME,SEX)VALUES(?,?,?,?)";
[_databaseQueueinDatabase:^(FMDatabase *db) {
//判断字段 “SEX”否不存在与 “Message”表中
if (![dbcolumnExists:@"SEX"inTableWithName:@"Message"])
{
NSString *alertSql = [NSStringstringWithFormat:@"ALTER TABLE %@ ADD %@ TEXT",@"Message",@"SEX"];
[db executeUpdate:alertSql];
}
//检测插入数据是否重复
FMResultSet *resultSet = [dbexecuteQuery:judgeSql,userModel.ID];
BOOL isExist =NO;
while ([resultSetnext])
{
isExist = YES;
}
if (isExist ==NO)
{
[db executeUpdate:insertSql,userModel.ID,userModel.age,userModel.name,userModel.sex];
}
}];
}