SQLite模糊查询
一、示例
说明:本文简单示例了SQLite的模糊查询
1.新建一个继承自NSObject的模型
该类中的代码:
static sqlite3 *_db;
//首先需要有数据库
+(void)initialize
{
//获得数据库文件的路径
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName=[doc stringByAppendingPathComponent:@\"person.sqlite\"];
//将OC字符串转换为c语言的字符串
const char *cfileName=fileName.UTF8String;
//1.打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
int result = sqlite3_open(cfileName, &_db);
if (result==SQLITE_OK) { //打开成功
NSLog(@\"成功打开数据库\");
//2.创建表
const char *sql=\"CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);\";
char *errmsg=NULL;
result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
if (result==SQLITE_OK) {
NSLog(@\"创表成功\");
}else
{
printf(\"创表失败---%s\",errmsg);
}
}else
{
NSLog(@\"打开数据库失败\");
}
}
//保存一条数据
+(void)save:(YYPerson *)person
{
//1.拼接SQL语句
NSString *sql=[NSString stringWithFormat:@\"INSERT INTO t_person (name,age) VALUES (\'%@\',%d);\",person.name,person.age];
//2.执行SQL语句
char *errmsg=NULL;
sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
if (errmsg) {//如果有错误信息
NSLog(@\"插入数据失败--%s\",errmsg);
}else
{
NSLog(@\"插入数据成功\");
}
}
+(NSArray *)query
{
return [self queryWithCondition:@\"\"];
}
//模糊查询
+(NSArray *)queryWithCondition:(NSString *)condition
{
//数组,用来存放所有查询到的联系人
NSMutableArray *persons=nil;
/*
[NSString stringWithFormat:@\"SELECT id, name, age FROM t_person WHERE name like \'%%%@%%\' ORDER BY age ASC;\", condition];
NSString *NSsql=[NSString stringWithFormat:@\"SELECT id,name,age FROM t_person WHERE name=%@;\",condition];
*/
NSString *NSsql=[NSString stringWithFormat:@\"SELECT id,name,age FROM t_person WHERE name like \'%%%@%%\' ORDER BY age ASC;\",condition];
NSLog(@\"%@\",NSsql);
const char *sql=NSsql.UTF8String;
sqlite3_stmt *stmt=NULL;
//进行查询前的准备工作
if (sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL)==SQLITE_OK) {//SQL语句没有问题
NSLog(@\"查询语句没有问题\");
persons=[NSMutableArray array];
//每调用一次sqlite3_step函数,stmt就会指向下一条记录
while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
//取出数据
//(1)取出第0列字段的值(int类型的值)
int ID=sqlite3_column_int(stmt, 0);
//(2)取出第1列字段的值(text类型的值)
const unsigned char *name=sqlite3_column_text(stmt, 1);
//(3)取出第2列字段的值(int类型的值)
int age=sqlite3_column_int(stmt, 2);
YYPerson *p=[[YYPerson alloc]init];
p.ID=ID;
p.name=[NSString stringWithUTF8String:(const char *)name];
p.age=age;
// NSLog(@\"%@\",p.name);
[persons addObject:p];
// NSLog(@\"haha%@\",persons);
}
}else
{
NSLog(@\"查询语句有问题\");
}
//NSLog(@\"haha%@\",persons);
return persons;
}
@end
本文地址:https://www.stayed.cn/item/22796
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我