工程中经常需要使用数据库来保存一些数据在本地手机上,iOS是自带Sqlite的,但是常用的还是第三方的类库——FMDB。这里说一说基本的使用方法
对于数据库来说,最开始的当然是建立数据库,在使用数据库前,最好先检查一下数据库是否存在,如果存在,则把数据库实例指向已存在的那个数据库,如果不存在,则创建:
//SqlTest.h @property (strong, nonatomic) FMDatabase *db;//数据库 ———————————————————————————————— //SqlTest.m if (!self.db) {//判断数据库是否存在,不存在则创建数据库 //获取文件路径 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *dbFilePath = [docs[0] stringByAppendingPathComponent:@"db.sqlite"]; //获取或创建数据库 self.db = [FMDatabase databaseWithPath:dbFilePath]; }
if (![self.db open]) {//判断数据库是否打开,没打开则提示失败 NSLog(@"打开数据库失败"); return; } [self.db setShouldCacheStatements:YES];//为数据库设置缓存,提高查询效率
if (![self.db tableExists:@"user"]) {//判断user表是否存在,不存在则创建表 //这里给id设置为自增并且为key [self.db executeUpdate:@"CREATE TABLE user(_id INTEGER PRIMARY KEY, Username VARCHAR(50), Password VARCHAR(50))"]; NSLog(@"创建表成功"); }
//向user表中添加一行用户名和密码分别为Cloudox和123456的数据 [self.db executeUpdate:@"INSERT INTO user (Username, Password) VALUES (?, ?)", @"Cloudox", @"123456"]; NSLog(@"添加数据成功");
//在user表中查询用户名为Cloudox的行数据 FMResultSet *rs = [self.db executeQuery:@"SELECT * FROM user WHERE Username = (?)", @"Cloudox"]; //循环读取所有搜索到的数据获取想要的列信息,这里只有一行,获取对应的密码 while ([rs next]) { self.password = [rs stringForColumn:@"password"]; }
//修改用户名为Cloudox的行的密码 [self.db executeUpdate:@"UPDATE user SET Password = (?) WHERE Username = (?) ", "456789", "Cloudox"];
//删除用户名为Cloudox的行 [self.db executeUpdate:@"DELETE FROM user WHERE Username = (?)", "Cloudox"];
//清除名为user的表的所有数据 [self.db executeUpdate:@"DELETE FROM user"];
//删除名为user的表 [self.db executeUpdate:@"DROP TABLE user"];
NSError *error; //创建文件管理器 NSFileManager *fileManager = [NSFileManager defaultManager]; //判断是否存在数据库文件,存在则删除 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *dbFilePath = [docs[0] stringByAppendingPathComponent:@"db.sqlite"]; if ([fileManager fileExistsAtPath:dbFilePath]) { [self.db close]; //先关闭数据库再删除 //删除文件 [fileManager removeItemAtPath:dbFilePath error:&error]; }