@(〓〓 iOS-实用技术)[SQLite 数据库]
- 作者: Liwx
- 邮箱: 1032282633@qq.com
- 09.iOS FMDB的基本使用
- 1.FMDB基本使用
- FMDB简介
- FMDB的安装方式
- FMDB核心类
- FMDatabase数据库
- FMResultSet查询结果集
- FMDatabaseQueue线程安全数据库操作
- FMDB使用步骤
- 2.FMDabaseQueue的简单使用
- FMDabaseQueue简介
- FMDabaseQueue的使用
- 3.FMDB FMDatabase类的简单使用
- 手动集成FMDB步骤
- 创建数据库和数据表基本步骤
- FMDatabase数据库的增删改查(CRUD)
- 4.FMDatabaseQueue数据库队列基本使用
- 使用FMDatabaseQueue创建数据库
- FMDatabaseQueue队列数据库的增删改查(CRUD)
1.FMDB基本使用
FMDB简介
- 1.什么是FMDB?
- 2.FMDB有什么优势?
FMDB的安装方式
- 1.Cocoapods
- 2.手动集成
- 1.下载FMDB框架
FMDB GitHub链接: https://github.com/ccgus/fmdb
- 1.下载FMDB框架
FMDB核心类
FMDatabase数据库
FMResultSet查询结果集
FMDatabaseQueue线程安全数据库操作
FMDB使用步骤
-
1.打开数据库
通过指定SQLite数据库文件路径来创建FMDatabase对象具体文件路径
空字符串@""
nil
// 1.打开数据库
FMDatabase *db = [FMDatabase databaseWithPath:path];
if ([db open]) { NSLog(@"打开成功!"); }
- 2.执行更新
// FMDB更新方法
-(BOOL)executeUpdate:(NSString)sql, ...
-(BOOL)executeUpdateWithFormat:(NSString)format, ...
-(BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
- 执行更新示例:
// 2.执行更新
[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]
- 3.执行查询
- 查询方法
- (FMResultSet *)executeQuery:(NSString*)sql, ...
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
- 执行查询示例:
// 查询数据
FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
// 遍历结果集
while ([rs next]) {
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
double score = [rs doubleForColumn:@"score"];
}
- 4.关闭数据库
[self.db close];
2.FMDabaseQueue的简单使用
FMDabaseQueue简介
FMDabaseQueue的使用
- 1.FMDatabaseQueue的使用
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
简单使用
[queue inDatabase:^(FMDatabase *db) {
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];
// 查询
FMResultSet *rs = [db executeQuery:@"select * from t_student"];
}];
使用事务
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];
//查询
FMResultSet *rs = [db executeQuery:@"select * from t_student"];
}];
3.FMDB FMDatabase类的简单使用
手动集成FMDB步骤
- 1.下载FMDB框架
- 2.将fmdb框架文件夹拖入工程
- 3.添加系统依赖库
sqlite3.0.tbd
- 4.导入
FMDB.h
头文件,编译成功.集成FMDB完成
创建数据库和数据表基本步骤
- 1.拼接数据库存储的沙盒路径
- 2.通过路径创建数据库
- 3.打开数据库
- 如果成功打开数据库后,创建数据表.
- 创建数据库和数据表参考代码
- (void)viewDidLoad {
[super viewDidLoad];
// 0.拼接数据库存放的沙盒路径
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
NSString *sqlFilePath = [path stringByAppendingPathComponent:@"student.sqlite"];
// 1.通过路径创建数据库
self.db = [FMDatabase databaseWithPath:sqlFilePath];
// 2.打开数据库
if ([self.db open]) {
NSLog(@"打开成功");
BOOL success = [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER DEFAULT 1)"];
if (success) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
} else {
NSLog(@"打开失败");
}
}
FMDatabase数据库的增删改查(CRUD
)
- 1.插入数据
// 插入数据
static NSInteger age = 10;
age++;
BOOL success = [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", @"jack", @(age)];
if (success) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
}
- 2.删除数据
// 删除数据
BOOL success = [self.db executeUpdate:@"DELETE FROM t_student WHERE age > 20 AND age < 25;"];
- 3.修改数据
// 修改数据
BOOL success = [self.db executeUpdate:@"UPDATE t_student SET name = 'liwx' WHERE age > 12 AND age < 15;"];
- 4.查询数据
// 查询数据
FMResultSet *result = [self.db executeQuery:@"SELECT id, name, age FROM t_student WHERE age > 25;"];
while ([result next]) {
int ID = [result intForColumnIndex:0];
NSString *name = [result stringForColumnIndex:1];
int age = [result intForColumn:@"age"];
NSLog(@"ID: %zd, name: %@, age: %zd", ID, name, age);
}
4.FMDatabaseQueue数据库队列基本使用
使用FMDatabaseQueue创建数据库
- 1.创建一个FMDatabaseQueue对象
- 2.使用block传递数据库
- 3.使用SQL语句创建数据表
- (void)viewDidLoad {
[super viewDidLoad];
// 0.拼接数据库存放的沙盒路径
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
NSString *sqlFilePath = [path stringByAppendingPathComponent:@"student.sqlite"];
// 1.创建一个FMDatabaseQueue对象
// 只要创建数据库队列对象, FMDB内部就会自动给我们加载数据库对象
self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:sqlFilePath];
// 2.执行操作
// 会通过block传递队列中创建好的数据库
[self.dbQueue inDatabase:^(FMDatabase *db) {
BOOL success = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER DEFAULT 1);"];
if (success) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
}];
}
FMDatabaseQueue队列数据库的增删改查(CRUD
)
- 1.插入数据
- (IBAction)insertClick {
static NSInteger age = 10;
age++;
[self.dbQueue inDatabase:^(FMDatabase *db) {
BOOL success = [db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", @"jack", @(age)];
if (success) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
}
}];
}
- 2.删除数据
// 删除数据
[self.dbQueue inDatabase:^(FMDatabase *db) {
BOOL success = [db executeUpdate:@"DELETE FROM t_student WHERE age > 20 AND age < 25;"];
// 判断是否SQL是否执行成功
// ...
}
- 3.修改数据
// 修改数据
[self.dbQueue inDatabase:^(FMDatabase *db) {
BOOL success = [db executeUpdate:@"UPDATE t_student SET name = 'liwx' WHERE age > 12 AND age < 15;"];
// 判断是否SQL是否执行成功
// ...
}
- 4.查询数据
// 查询数据
- (IBAction)queryClick {
[self.dbQueue inDatabase:^(FMDatabase *db) {
FMResultSet *result = [db executeQuery:@"SELECT id, name, age FROM t_student WHERE age > 25;"];
while ([result next]) {
int ID = [result intForColumnIndex:0];
NSString *name = [result stringForColumnIndex:1];
int age = [result intForColumn:@"age"];
NSLog(@"ID: %zd, name: %@, age: %zd", ID, name, age);
}
}];
}