iOS进阶道路 --SQLite使用

来源:互联网 发布:联通大数据平台 编辑:程序博客网 时间:2024/06/06 01:17
iOS系统自带数据库SQLite的使用

本文开发环境:Xcode8.3.3


本文介绍如何使用iOS系统自带的数据库,来体验一下原汁原味的SQLite。为什么要用原生的SQLite而不用github上现成的工具FMDB(https://github.com/ccgus/fmdb),纯粹只是为了熟悉一下SQLite语句而已。

一:导入需要用到的系统库

1: 单击项目导航面板TARGETS目录下的项目名,再单击项目编辑区的‘Build Phases’标签页,显示下图的界面。

 












2: 点击‘+’输入“sqlite”,选择“libsqlite3.0.tbd”添加就大功告成了。


二:配置完成了,上代码。

1: ViewController.m文件中,#import <sqlite3.h>包含头文件。接下来即可在程序中使用SQLite的API执行数据库访问了。
    //指定数据库存储路径    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documents = [paths objectAtIndex:0];    NSString *database_path = [documents stringByAppendingPathComponent:@"test.sqlite"];        //打开或创建一个SQLite数据库    sqlite3 *sqlite;    if (sqlite3_open([database_path UTF8String], &sqlite) != SQLITE_OK){        NSLog(@"数据库打开失败");        sqlite3_close(sqlite);    }    //执行建表语句    char *errMsg;    const char * createSQL = "create table if not exists word_inf (id integer primary key autoincrement,name text,age integer,adress text)";    int result = sqlite3_exec(sqlite, createSQL, NULL, NULL, &errMsg);        if (result == SQLITE_OK) {                const char *insertSQL = "insert into word_inf (name,age,adress) values(?,?,?)";        sqlite3_stmt * stmt;        //预编译SQL语句,stmt变量保存了预编译结果的指针        int insertResult = sqlite3_prepare_v2(sqlite, insertSQL, -1, &stmt, nil);        //如果预编译成功        if (insertResult == SQLITE_OK) {            //为第一个?占位符绑定参数            sqlite3_bind_text(stmt, 1, [@"哥哥" UTF8String], -1, NULL);            //为第二个?占位符绑定参数            sqlite3_bind_text(stmt, 2, [@"27" UTF8String], -1, NULL);            //为第三个?占位符绑定参数            sqlite3_bind_text(stmt, 3, [@"北京" UTF8String], -1, NULL);            //执行SQL语句            sqlite3_step(stmt);        }        sqlite3_finalize(stmt);    }        //关闭数据库    sqlite3_close(sqlite);

或者也可以将执行sql的语句放在一个方法中,建表,增加一条记录,更新一条记录,都可以调用。

- (void)execSQl:(NSString*)sql {        char *err;    if (sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {        sqlite3_close(sqlite);        NSLog(@"数据库操作失败!");    }}


增加两个记录

        NSString *insertSQL_01 = @"insert into word_inf (name,age,adress) values('哥哥','27','北京')";        [self execSQl:insertSQL_01];                NSString *insertSQL_02 = @"insert into word_inf (name,age,adress) values('妹妹','25','北京')";        [self execSQl:insertSQL_02];


更新一个记录

    NSString *updateSQL = @"update word_inf set name='宝宝',adress='中国' where name='妹妹'";    [self execSQl:updateSQL];


删除一个记录

    NSString *deleteSQL = @"delete from word_inf where name = '哥哥'";    [self execSQl:deleteSQL];


查找记录

    const char *fetchSQL = "select id,name,age,adress from word_inf where name='宝宝'";    sqlite3_stmt *stmt;    int fetchResult = sqlite3_prepare_v2(sqlite, fetchSQL, -1, &stmt, nil);    if (fetchResult != SQLITE_OK)        NSLog(@"查询失败 ...");    else{        while (sqlite3_step(stmt) == SQLITE_ROW) {            //查询的结果可能不止一条,直到  sqlite3_step(stmt) == SQLITE_ROW,查询结束            int   ID      = sqlite3_column_int(stmt, 0);            char *name    = (char *)sqlite3_column_text(stmt, 1);            int   age     = sqlite3_column_int(stmt, 2);            char *adress  = (char *)sqlite3_column_text(stmt, 3);            NSLog(@"ID=%d  name=%s  age=%d  adress=%s",ID,name,age,adress);        }    }


至此,我已经熟悉了系统自带的SQLite的增删改查功能,是不是已经迫不及待的要试一试了呢?
本文介绍的SQLite用法,或有不当之处敬请各位大牛指正。
原创粉丝点击