iOS-SQLite的使用

一、首先要添加库文件libsqlite3.tbd

二、导入头文件,#import <sqlite3.h>

//生成路径
+(NSString *)path{
    
    NSArray *documentArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    
    NSString *documentPath = [documentArr firstObject];
    // crylown.db 为数据库的名字
    NSString *path = [NSString stringWithFormat:@"%@/student.sqlite",documentPath];
    NSLog(@"位置path == %@",path);
    return path;
}

//创建/打开数据库
-(void)createDataBase{

    int databaseResult = sqlite3_open([[SqliteObject path] UTF8String], &database);

    if (databaseResult == SQLITE_OK) {
          [self createForm];
    }else{
          NSLog(@"创建/打开数据库失败,%d",databaseResult);
    }
}

//创建表
-(void)createForm{
   
         char *error = NULL;
        
    //    建表格式: create table if not exists 表名 (列名 类型,....)    注: 如需生成默认增加的id: id integer primary key autoincrement
        const char *createSQL = "create table if not exists t_students (id integer primary key autoincrement, name text, age integer, sex text)";
        // 执行sql语句
        /**
           第1个参数:数据库对象
           第2个参数:sql语句
           第3个参数:查询时候用到的一个结果集闭包
           第4个参数:用不到
           第5个参数:错误信息
         */
        int tableResult = sqlite3_exec(database, createSQL, NULL, NULL, &error);
        
        if (tableResult == SQLITE_OK) {
            NSLog(@"创建成功");
        }else{
            NSLog(@"创建表失败:%s",error);
        }
}

// 插入数据
- (void)insertData:(NSString*)name ageinteger:(int)age sexStr:(NSString*)sex
{
        // 拼接 sql 语句
        NSString *sql = [NSString stringWithFormat:@"insert into t_students (name,age,sex) values ('%@',%d,'%@');",name,age,sex];
        // 执行 sql 语句
        char *errMsg = NULL;
        int result = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &errMsg);
        
        if (result == SQLITE_OK) {
            NSLog(@"插入数据成功 - %@",name);
        } else {
            NSLog(@"插入数据失败 - %s",errMsg);
        }
}

// 查询操作
- (void)sqlData {
    // sql语句
    const char *sql="SELECT id,name,age,sex FROM t_students WHERE age<20;";
    sqlite3_stmt *stmt = NULL;
    /**
         第1个参数:一个已经打开的数据库对象
         第2个参数:sql语句
         第3个参数:参数2中取出多少字节的长度,-1 自动计算,\0停止取出
         第4个参数:准备语句
         第5个参数:通过参数3,取出参数2的长度字节之后,剩下的字符串
       */
    // 进行查询前的准备工作
    if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) == SQLITE_OK) {   // sql语句没有问题
        NSLog(@"sql语句没有问题");
        
        // 每调用一次sqlite3_step函数,stmt就会指向下一条记录
        while (sqlite3_step(stmt) == SQLITE_ROW) {  // 找到一条记录
            // 取出数据
            int ID = sqlite3_column_int(stmt, 0);   // 取出第0列字段的值
            const unsigned char *name = sqlite3_column_text(stmt, 1);   // 取出第1列字段的值
            int age = sqlite3_column_int(stmt, 2);  // 取出第2列字段的值
            const unsigned char *sex = sqlite3_column_text(stmt, 3);
            printf("%d %s %d\n %s",ID,name,age,sex);
        }
    } else {
        NSLog(@"查询语句有问题");
    }
}

//修改数据
-(void)updateData{
    
    //其实Sqlite的数据插入,修改,删除执行的方法都是一样的只是执行的sql语句不一样,想知道sql的更多语句操作自行百度了,比较多这里就不讲解了,只介绍一些基本的操作方法。
    //sqlite3数据(把年龄大于60的学生名字全部改成‘哈哈’)
    NSString *sql = @"update t_students set name = '哈哈' where age > 60";
    char *errorMesg = NULL;
    int result = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &errorMesg);
    if (result == SQLITE_OK) {

            NSLog(@"更改成功");
        }else {

            NSLog(@"更改失败");
        }
    //然后执行查询语句就能看到更改后的效果了
}

//删除数据
-(void)deleteData{
    //删除表中年龄大于60的学生数据
    NSString *sql = @"delete from t_students where age >= 60";
    char *errorMesg = NULL;
    int result = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &errorMesg);
    if (result == SQLITE_OK) {

        NSLog(@"删除成功");
    }else {

        NSLog(@"删除失败");
    }
}

三、SQL基础

1、SQL语句常用操作
增、删、改、查,CRUD,Create[新建], Retrieve[检索], Update[更新], Delete[删除]。

2、SQL语法写法特点
a、不区分大小写(CREATE = create)
b、每条语句以分号(;)结尾
c、关键字建议大写

3、SQL语句常用关键字
select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等
数据定义语句(DDL):包括create和drop等操作,在数据库中创建新表或删除表(create table或 drop table)
数据操作语句(DML):包括insert、update、delete等操作,分别用于添加、修改、删除表中的数据
数据查询语句(DQL):可以用于查询获得表中的数据,关键字select是DQL(也是所有SQL)用得最多的操作,其他DQL常用的关键字有where,order by,group by和having

https://blog.csdn.net/mrliangc/article/details/52491027
https://www.jianshu.com/p/a30e22cdf739
https://www.jianshu.com/p/36ffc387389b

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,475评论 4 372
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,744评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,101评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,732评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,141评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,049评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,188评论 2 320
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,965评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,716评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,867评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,341评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,663评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,376评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,200评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,990评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,179评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,979评论 2 279

推荐阅读更多精彩内容