简介iOS开发中应用SQLite的模糊查询和常用函数

前端技术 2023/09/08 IOS

SQLite模糊查询
一、示例

说明:本文简单示例了SQLite的模糊查询

1.新建一个继承自NSObject的模型

该类中的代码:

//@property(nonatomic,assign)sqlite3 *db;
@end

复制代码 代码如下:

@implementation YYPersonTool

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

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。