fmdb模糊查询语句
一、FMDB简介
FMDB(FMDatabaseQueue)是一个用于操作SQLite数据库的第三方框架,支持多线程环境下的操作,它通过封装SQLite的C语言API,使得在iOS开发中对数据库的操作更加方便和灵活,FMDB主要包含以下几种类型:
FMDatabase:单线程操作的数据库。
FMDatabaseQueue:多线程操作的数据库队列。
FMResultSet:查询结果集。
二、创建和使用FMDB数据库
创建数据库单例对象
为了保证数据库队列只创建一次,通常使用单例模式来创建数据库对象,这可以确保全局只有一个串行队列,从而保证数据操作的安全性。
// 创建数据库单例对象
(FMDatabase *)database {
static FMDatabase *database = nil;
if (!database) {
database = [FMDatabase databaseWithPath:[self getDatabasePath]];
}
return database;
}
创建数据库路径和表格
创建数据库路径和表格时,需要指定表名和字段名及其类型。
// 创建数据库路径
(NSString *)getDatabasePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths.firstObject;
return [documentsDirectory stringByAppendingPathComponent:@"test.sqlite"];
}
// 创建表格
(void)createTable {
FMDatabase *db = [self database];
[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_heros (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"];
}
增删改查操作
插入数据(INSERT INTO)
// 插入数据
(void)insertData:(NSString *)name age:(NSInteger)age {
FMDatabase *db = [self database];
[db executeUpdate:@"INSERT INTO t_heros (name, age) VALUES (?, ?)", name, @(age)];
}
删除数据(DELETE)
// 删除数据
(void)deleteDataWithID:(int)id {
FMDatabase *db = [self database];
[db executeUpdate:@"DELETE FROM t_heros WHERE id = ?", @(id)];
}
更新数据(UPDATE)
// 更新数据
(void)updateDataWithName:(NSString *)newName age:(NSInteger)newAge forID:(int)id {
FMDatabase *db = [self database];
[db executeUpdate:@"UPDATE t_heros SET name = ?, age = ? WHERE id = ?", newName, @(newAge), @(id)];
}
查询数据(SELECT)
// 查询数据
(FMResultSet *)queryDataWithKeyword:(NSString *)keyword {
FMDatabase *db = [self database];
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM t_heros WHERE name LIKE '%%@%%'", keyword];
FMResultSet *resultSet = [db executeQuery:sql];
return resultSet;
}
三、模糊查询详解
模糊查询的概念
模糊查询是指确定给定的字符串是否与指定的模式匹配,模式可以包含常规字符和通配符字符,常见的通配符包括:
%:表示任意数量的字符(包括零个字符)。
_:表示单个字符。
模糊查询的实现步骤
2.1 创建项目并配置环境
需要创建一个iOS项目并配置好FMDB环境,包括导入libsqlite3.tbd库。
2.2 创建UI界面
创建一个UITableView和一个UISearchBar,分别添加到主视图和tableView头视图上,并实现所需的数据源方法和代理方法。
// 在AppDelegate中设置导航控制器并显示主界面
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *viewController = [[ViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
2.3 创建扩展类和工具类
创建一个获取汉字转成拼音字符串的扩展类,并封装一个数据库管理的工具类。
// 声明获取汉字转换成拼音的方法
+ (NSString *)pinyin:(NSString *)chinese {
// 实现将中文转换为拼音的逻辑
return pinyinResult; // 返回转换后的拼音字符串
}
2.4 实现模糊查询功能
在工具类中实现模糊查询的功能,支持根据关键字进行搜索。
// 根据关键字进行模糊查询
(FMResultSet *)fuzzyQueryWithKeyword:(NSString *)keyword {
FMDatabase *db = [self database];
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM t_heros WHERE name LIKE '%%@%%'", keyword];
FMResultSet *resultSet = [db executeQuery:sql];
return resultSet;
}
2.5 最终效果展示
完成上述步骤后,可以在UITableView中展示查询结果,并根据用户输入实时更新查询结果。

四、常见问题解答
如何在FMDB中进行模糊查询?
答:在FMDB中进行模糊查询时,可以使用LIKE关键字结合通配符%来实现,要查找名称中包含某个关键词的记录,可以使用以下SQL语句:
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM t_heros WHERE name LIKE '%%@%%'", keyword]; FMResultSet *resultSet = [db executeQuery:sql];
注意,由于%是特殊字符,需要进行转义处理,正确的拼接方式是将%替换为%%。
如何在FMDB中实现拼音检索功能?
答:要在FMDB中实现拼音检索功能,可以按照以下步骤进行:
1、创建扩展类:创建一个获取汉字转成拼音字符串的扩展类。
@implementation NSString (Pinyin)
+ (NSString *)pinyin:(NSString *)chinese {
// 实现将中文转换为拼音的逻辑
return pinyinResult; // 返回转换后的拼音字符串
}
@end
2、封装数据库管理工具类:在工具类中调用扩展类的方法,实现根据拼音进行模糊查询的功能。
(FMResultSet *)fuzzyQueryWithPinyin:(NSString *)pinyin {
FMDatabase *db = [self database];
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM t_heros WHERE pinyin LIKE '%%@%%'", pinyin];
FMResultSet *resultSet = [db executeQuery:sql];
return resultSet;
}
3、在UI层调用:在UISearchBar的代理方法中调用工具类的模糊查询方法,并更新UITableView的数据源以显示查询结果。
(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
NSString *pinyin = [[NSString pinyin:searchText] lowercaseString];
FMResultSet *resultSet = [self fuzzyQueryWithPinyin:pinyin];
self.dataSource = [resultSet resultSet]; // 假设有一个dataSource数组存储查询结果
[self.tableView reloadData]; // 刷新表格显示
}
通过以上步骤,可以实现在FMDB中使用拼音进行模糊查询的功能。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/108158.html