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