iOS-Senior19-FMDB第三方应用

代码版

//第一步:引入框架,引入支持类库(libsqlite3.0添加)

#import <FMDB.h>

//声明数据库对象

@property (nonatomic,strong) FMDatabase *dataBase;

//存储路径

@property (nonatomic,strong) NSString *filePath;

###############创建表######################

- (void) createTable {

//第一步:创建sql语句

NSString *createSql = @"create table if not exists t_student(id integer primary key autoincrement not null,name text not null,age integer not null,sex text not null)";

//第二步:找到存储路径

NSString *document = [NSSearchPathForDirectoriesInDomains (NSDocumentDirctory,NSUserDomainMask,YES) objectAtIndex:0];

NSLog(@"document = %@",document);

self.filePath = [document stringByAppendingPathComponent:@"student.sqlite"];

//第三步:使用路径初始化FMDB对象

self.dataBase = [FMDatabase databaseWithPath:self.filePath];

//第四步:(数据库执行相关的操作)需要判断数据库打开的时候进行的执行语句

if([self.dataBase open]){

BOOL result = [self.dataBase executeUpdate:createSql];

if(result){

NSLog(@"建表成功");

}else {

NSLog(@"建表失败");

}

}

//第五步:关闭数据库

[self.dataBase close];

}

############添加数据####################

//打开数据库

[self.dataBase open];

//第二步:进行相关的操作

NSArray *nameArray = [NSArray arrayWithObjects :@"mbboy",@"boom sky",@"小明"];

for(int i = 0; i <nameArray.count; i++){

NSString *name = [nameArray objectAtIndex : i];

//插入语句

NSString *insertSql = @"insert into t_student(name,age,sex) values(?,?,?)";

BOOL result = [self.dataBase executeUpdate:@"insert into t_student(name,age,sex) values(?,?,?)",name,@"69",@"boy"];

if(result) {

NSLog(@"插入成功");

}else {

NSLog(@"插入失败");

}

//关闭数据库

[self.dataBase close];

}

##############更改数据######################

//打开数据库

[self.dataBase];

//给mbboy改名字

BOOL result = [self.dataBase executeUpdate : @"update t_student set name = ? where name = ?",@"孟玲旭",@"mbboy"];

if(result){

NSLog(@"更改成功");

} else {

NSLog(@"更改失败");

}

//关闭数据库

[self.dataBase close];

}

##############删除数据#######################

//打开数据库

[self.dataBase open];

//执行语句

BOOL result = [self.dataBase executeUpdate:@"delete from t_student where name = ?",@"孟玲旭"];

if(result){

NSLog(@"删除成功");

}else {

NSLog(@"删除失败");

}

[self.dataBase close];

 

###################查询数据###################

//打开数据库

[self.dataBase open];

//查询当前结果使用的类FMResultSet

FMResultSet *resultSet = [self.dataBase executeQuery :@"select *from t_student"];

//遍历出需要的结果内容

while([resultSet next]){

NSSting *name = [resultSet objectForColumnName :@"name"];

NSInteger age = [resultSet intForColumn:@"age"];

NSString *sex = [resultSet objectForColumnName:@"sex"];

}

//关闭数据库

[self.dataBase close];

}

##############插入很多学生####################

//以队列的形式添加数据是FMDB比较常用的添加方式

    //FMDB不支持多个线程同时操作,所有一般以串行的方式实现相关的操作

    [self.dataBase open];

    //第一步:创建操作队列

    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:self.filePath];

    //标识:记录是否操作成功

    __block BOOL isSucceed = YES;

    //第二步:把所需要的事件打包放在操作队列中

    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {

        //串行队列

        isSucceed = [db executeUpdate:@"insert into t_student(name, age, sex) values (?,?,?)", @"隔壁老王", @"18", @"nan"] && isSucceed;

        isSucceed = [db executeUpdate:@"insert into t_student(name, age, sex) values (?,?,?)", @"-1", @"69", @"unknow"] && isSucceed;

        isSucceed = [db executeUpdate:@"insert into t_student(name, age, sex) values (?,?,?)", @"ajar", @"18", @"nan"] && isSucceed;

        //如果有错误,就会将它返回

        if (!isSucceed) {

            //block返回的参数rollback尽行处理(bool类型的指针)

            *rollback = YES;

            return;

        }

        

    }];

    //关闭数据库

    [self.dataBase close];

 

posted on 2016-05-30 21:39  萌萌的周丽娜  阅读(129)  评论(0编辑  收藏  举报