#import "RootViewController.h" #import "FMDatabase.h" @interface RootViewController () { FMDatabase * myDB; } @end @implementation RootViewController //FMDB是将SQLite中复杂的SQL语法进行封装 //FMDB适用于ARC或者MRC环境的编码 //具有完美的添加、查找、删除、修改数据库的方法 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (IBAction)createDB:(id)sender { //数据库在使用之前 一定要确保在沙盒路径下确实存在该库 //<1>获取当前工程沙盒路径 //数据库的后缀是.db或者.sqlite NSString * path = [NSHomeDirectory() stringByAppendingString:@"/Documents/person.db"]; //使用数据库 必须确保这个数据库是打开状态 //<2>打开数据库 myDB = [[FMDatabase alloc]initWithPath:path]; BOOL isOpen = [myDB open]; if(isOpen) { NSLog(@"数据库打开成功"); } else { NSLog(@"数据库打开失败%@",[myDB lastErrorMessage]); } //如果在该路径下存在person.db这个库 就直接打开该库 如果不存在这个库 就先创建库再打开 //不会在同一个路径下创建同名的库 //创建表格 NSString * sql = @"create table if not exists Users(ID integer primary key autoincrement,name varchar(256),age integer,headImage blob)"; //blob表示的是二进制 BOOL isSuccess = [myDB executeUpdate:sql]; //executeUpdate:除了查询语句 剩余的其他语句都是用该方法调用 if(isSuccess) { NSLog(@"表格创建成功"); } else { NSLog(@"表格创建失败%@",myDB.lastErrorMessage); } //表格与数据库是一样的 在同一个路径下创建同名表格失败 NSLog(@"%@",path); } - (IBAction)insertDB:(id)sender { NSString * sql = @"insert into Users(name,age,headImage) values (?,?,?)"; //? 占位符 可以是任意类型的对象指针 不能是基本类型的数据 如果想要存放基本类型的数据 需要将基本类型的数据封装成OC的对象 NSString * nameStr = @"张三"; NSNumber * ageNum = [NSNumber numberWithInt:20]; UIImage * image = [UIImage imageNamed:@"0.png"]; //图片需要转化成NSData类型 NSData * data = UIImagePNGRepresentation(image); //拼接sql语句 BOOL ret = [myDB executeUpdate:sql,nameStr,ageNum,data]; if(ret) { NSLog(@"数据添加成功"); } else { NSLog(@"数据添加失败%@",myDB.lastErrorMessage); } } - (IBAction)updateDB:(id)sender { NSString * sql = @"update Users set age = ? where name = ?"; NSString * name = @"张三"; NSNumber * ageNum = [NSNumber numberWithInt:50]; BOOL ret = [myDB executeUpdate:sql,ageNum,name]; if(ret) { NSLog(@"修改成功"); } else { NSLog(@"修改失败%@",myDB.lastErrorMessage); } } - (IBAction)selectDB:(id)sender { NSString * sql = @"select * from Users where name = ?"; NSString * name = @"张三"; FMResultSet * result = [myDB executeQuery:sql,name]; while ([result next]) { NSString * name = [result stringForColumn:@"name"]; //stringForColumn:会将该列的数据读出 以字符串的形式获取 int age = [result intForColumnIndex:2]; //按钮列的下标读取数据 读出的数据直接转化成int类型 NSData * imageData = [result dataForColumn:@"headImage"]; UIImage * headImage = [UIImage imageWithData:imageData]; self.nameLabel.text = name; self.ageLabel.text = [NSString stringWithFormat:@"%d",age]; self.headImage.image = headImage; } } - (IBAction)deleteDB:(id)sender { NSString * sql = @"delete from Users where name = ?"; NSString * name = @"张三"; BOOL ret = [myDB executeUpdate:sql,name]; if(ret) { NSLog(@"删除成功"); } else { NSLog(@"删除失败"); } } - (IBAction)closeDB:(id)sender { //数据库关闭了以后 就不能对数据库进行其他操作 if(myDB) { [myDB close]; myDB = nil; } }