代码版
//第一步:引入框架,引入支持类库(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];