FMDB是一款简洁、易用的封装库。因此,在这里推荐使用第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,所以是线程安全的。
对多线程的并发操作进行处理,所以是线程安全的;
以OC的方式封装了SQLite的C语言API,使用起来更加的方便;
FMDB是轻量级的框架,使用灵活。
因为它是OC的语言封装的,只能在ios开发的时候使用,所以在实现跨平台操作的时候存在局限性。
NSArray *documents=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [documents firstObject];
NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"test.db"];
NSLog(@"%@", dbPath);
_dataBase = [FMDatabase databaseWithPath:dbPath];
if ([_dataBase open]) {
NSLog(@"打开成功");
} else {
NSLog(@"打开失败");
}
[_dataBase close];
NSString *createTableSql = @"create table if not exists Person(id integer primary key autoincrement,name text,age integer)";
BOOL success = [_dataBase executeUpdate:createTableSql];
if (success) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
- (void)insert {
if ([_dataBase open]) {
NSString *insertSQL = @"insert into Person (name,age) values (?,?)";
BOOL success = [_dataBase executeUpdate:insertSQL,@"王五",@19];
if (success) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
}
[_dataBase close];
}
}
- (void)update {
if ([_dataBase open]) {
NSString *updateSQL = @"update Person set name=?,age=? where id=?";
BOOL success = [_dataBase executeUpdate:updateSQL, @"王五", @20, @1];
if (success) {
NSLog(@"更新成功");
} else {
NSLog(@"更新失败");
}
[_dataBase close];
}
}
- (void)delete {
if ([_dataBase open]) {
NSString *deleteSQL = @"delete from Person where age=?";
BOOL success = [_dataBase executeUpdate:deleteSQL, @20];
if (success) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
[_dataBase close];
}
}
//若想删除全部数据:
- (void)deleteAll {
if ([_dataBase open]) {
NSString *deleteAllSQL = @"delete from Person where 1";
BOOL success = [_dataBase executeUpdate:deleteAllSQL];
if (success) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
[_dataBase close];
}
}
- (void)select {
if ([_dataBase open]) {
NSString *selectSQL = @"select * from Person";
//查询返回的为一个结果集
FMResultSet *set = [_dataBase executeQuery:selectSQL, @0];
//需要对结果集进行遍历操作
while ([set next]) {
//获取下一条记录,如果没有下一条,返回NO,跳出循环
//取数据
NSString *name = [set stringForColumn:@"name"];
NSInteger age = [set intForColumn:@"age"];
NSInteger ID = [set intForColumn:@"id"];
NSLog(@"%@, %ld, ID=%ld", name, age, ID);
}
[_dataBase close];
}
}