ios Sqlite 的基本使用

最近在仿写「掌上英雄联盟」的时候,有个搜索文章的功能。在搜索的时候会将搜索记录保存下来,所以有用到sqlite

导入 sqlite 依赖库

这里写图片描述

在代码中导入头文件

我在第一次使用的时候,导入了头文件也没有反应了。重启一下项目,就 OK 了

基本的使用

  1. 创建数据库


//数据库句柄
static sqlite3 *database = nil; 

//用于保存编译好的 sql 语句
static sqlite3_stmt *statement = nil;

//懒加载方式设置数据库路径
-(NSString *)fileName
{
    if (!_fileName) {
        _fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"search.sqlite"];

    }
    return _fileName;
}
//创建数据库
-(BOOL) openAndCreateTable{

    BOOL isSuccess = YES;

    NSFileManager *filemgr = [NSFileManager defaultManager];

    if ([filemgr fileExistsAtPath: self.fileName ] == NO){ //判断数据库是否已经存在

        const char *dbpath = [self.fileName UTF8String]; //由于 sqlite3是 c 语言,所以没有NSString 类型。**使用 UTF8String 转换为 char* 类型**
        if (sqlite3_open(dbpath, &database) == SQLITE_OK) //打开数据库
        {
            char *errMsg;
            const char *sql_stmt ="create table  SerchRecord (serchWord varchar(30) primary key)"; //sql 语句的编写
            if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg)  //执行 sql 语句
                != SQLITE_OK)
            {
                isSuccess = NO;
                NSLog(@"Failed to create table %s",errMsg);
            }
            sqlite3_close(database); //关闭数据库
            return  isSuccess;
        }
        else {
            isSuccess = NO;
            NSLog(@"Failed to open/create database");
        }
         }

    return  isSuccess;
}
  1. 增、删、查、改
-(BOOL) deleteRecord:(NSString *)recordString
{
    const char *dbpath = [self.fileName UTF8String];
    if (sqlite3_open(dbpath, &database) == SQLITE_OK)
    {

        //编写 sql 语句。这里只写了删除的 其他的一样一样的
        NSString *sqlString =  [NSString stringWithFormat:@"DELETE from SerchRecord where serchWord='%@'",recordString];
        NSLog(@"%@",sqlString);
        const char *deleteStm = [sqlString UTF8String];

        //编译 sql 语句
        sqlite3_prepare_v2(database, deleteStm,-1, &statement, NULL);
        if (sqlite3_step(statement) == SQLITE_DONE) //执行 sql语句
        {
            NSLog(@"删除成功"); 
            sqlite3_reset(statement);  //在关闭数据库,之前一定要清除sqlite3_stmt 中绑定的 sql 指令
            sqlite3_close(database);
            return YES;
        }
        else {
             sqlite3_reset(statement);
            sqlite3_close(database);
            return NO;
        }
    }


      return NO;
}

一些常见的 sqlite 函数 和结构体


sqlite3            *database  //数据库句柄,跟文件句柄FILE很类似

sqlite3_stmt      *stmt, //这个相当于ODBC的Command对象,用于保存编译好的SQL语句



sqlite3_open()   //打开数据库

sqlite3_exec()   //执行非查询的sql语句

sqlite3_prepare() // 准备sql语句,执行select语句或者要使用parameter bind时,用这个函数(封装了sqlite3_exec).

sqlite3_finalize(stmt) //释放 sqlite3_stmt 的 sql

Sqlite3_step(),  //在调用sqlite3_prepare后,使用这个函数在记录集中移动。

Sqlite3_close(), //关闭数据库文件





sqlite3_column_text() // 取text类型的数据。

sqlite3_column_blob() //取blob类型的数据

sqlite3_column_int()  //取int类型的数据


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值