iOS开发中SQLite简单使用(基础用法:创建表,增、删、改、查)

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。


iOS开发中SQLite简单使用:

1.首先要添加库文件libsqlite3.tbd  

2.一般使用的时候都是自己封装一个类然后方便使用。

创建类SQLiteManger,在SQLiteManger中导入头文件

#import <sqlite3.h>

然后创建实体类,类似于model方便使用

SQLiteModel

2.1 打开数据库

- (BOOL)openTheDatabase{

    //获取数据库文件路径

    NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/sqlite.db"];


    //初始化sqlite

    _sqlite = nil;

    //打开数据库文件,如果文件存在,则直接打开,如果不存在则创建新的文件然后打开

    int result = sqlite3_open([filePath UTF8String], &_sqlite);

    

    if (result != SQLITE_OK) {

        NSLog(@"数据库打开失败!");

        return NO;

    }

    NSLog(@"数据库打开成功!");

    return YES;

}

这里我们把打开数据库的代码写在一个方法里,因为跟其他的数据库一样sqlite的每一个数据库都是要先打开数据库才可以操作


2.2 创建表

这里我们创建一个表名叫t_user的表   四个字段  主键为userId(text类型)  ,username(text类型) ,age(integer类型) ,sex(text类型

   - (BOOL)createTable{

    //1.打开数据库

    if (![self openTheDatabase]) {

        return NO;

    }

    //2.创建SQL语句

    NSString *sqlStr = @"create table t_user(userId text primary key not null,username text,age integer,sex text)";

 //3.创建表

char *error = nil;

    int result = sqlite3_exec(_sqlite, [sqlStr UTF8String], NULLNULL, &error);

    

    if (result == SQLITE_OK) {

        NSLog(@"表格创建成功");

        sqlite3_close(_sqlite);

        return YES;

    }

    NSLog(@"表格创建失败");

    sqlite3_close(_sqlite);

    return NO;

}


2.3 插入数据

- (BOOL)insertDataWithUserId:(NSString *)userId username:(NSString *)username age:(int)age sex:(NSString *)sex{

    //1.打开数据库

    

    if (![self openTheDatabase]) {

        return NO;

    }

    

    //2.编写sql语句 value值需要绑定   ?代替

    NSString *sqlStr = @"insert into t_user(userId,username,age,sex) values(?,?,?,?)";

    

    //3.编译sql语句

    

    //声明stmt

    sqlite3_stmt *stmt = nil;

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    //编译不成功直接返回

    if (result != SQLITE_OK) {

        NSLog(@"编译失败");

        return NO;

    }

    

    //4.绑定参数

    sqlite3_bind_text(stmt, 1, [userId UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 2, [username UTF8String], -1, NULL);

    sqlite3_bind_int(stmt, 3, age);

    sqlite3_bind_text(stmt, 4, [sex UTF8String], -1, NULL);


    //5.执行sql语句

    

    int step = sqlite3_step(stmt);

    NSLog(@"返回的状态码是:%d  101是成功",step);

    if (step == SQLITE_ERROR) {

        NSLog(@"stmt执行失败!");

        //关闭数据库

        sqlite3_close(_sqlite);

        return NO;

    }else if (step == SQLITE_CONSTRAINT){

        //关闭数据库

        sqlite3_close(_sqlite);

        return NO;

    }

    

    

    //关闭编译后的stmt 关闭数据库

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    NSLog(@"插入成功");

    return YES;

}


2.4查询所有数据

- (NSArray *)queryData{

    //1.打开数据库

    if (![self openTheDatabase]) {

        return nil;

    }

    

    //2.编写sql语言

    NSString *sqlStr = @"select * from t_user ";

    

    //3.编译sql语句

    sqlite3_stmt *stmt = nil;

    

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    if (result != SQLITE_OK) {

        NSLog(@"编译失败!");

        

        return nil;

    }

    

    

    //4.绑定参数

    

    //5.执行sql sqlite3_step分步执行(单次)

    int step = sqlite3_step(stmt);

    

    if (step == SQLITE_ERROR) {

        NSLog(@"执行错误");

        

        return nil;

    }

    

    NSMutableArray *array = [NSMutableArray array];

    

    //判断执行该步后是否还有剩余数据

    while (step == SQLITE_ROW) {

        

        

        SQLiteModel *model = [[SQLiteModel alloc]init];

        

        //获取该该条数据的详细字段信息

        

        //userId

        model.userId = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 0) encoding:NSUTF8StringEncoding];

        //姓名

        model.username = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 1) encoding:NSUTF8StringEncoding];

        //年龄

        model.age = sqlite3_column_int(stmt, 2);

        //性别

        model.sex = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 3) encoding:NSUTF8StringEncoding];

        

        [array addObject:model];

        step = sqlite3_step(stmt);

    }

    

    //6.关闭数据库,关闭编译后的stmt

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    

    //返回数据数组

    return  array;

}



2.5根据userId更新某一条数据

- (BOOL)updateDataWithUserId:(NSString *)userId newName:(NSString *)newName newAge:(int)newAge newSex:(NSString *)newSex{

    //1.打开数据库

    if (![self openTheDatabase]) {

        return NO;

    }


    //2.编写sql语句 value值需要绑定   ?代替

    NSString *sqlStr = @"update t_user set username = ?,age = ?,sex = ? where userId = ? ";

    

    //3.编译sql语句

    

    //声明stmt

    sqlite3_stmt *stmt = nil;

    

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    //编译不成功直接返回

    if (result != SQLITE_OK) {

        NSLog(@"编译失败");

        return NO;

    }

    

    //4.绑定参数

    sqlite3_bind_text(stmt, 1, [newName UTF8String], -1, NULL);

    sqlite3_bind_int(stmt, 2, newAge);

    sqlite3_bind_text(stmt, 3, [newSex UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 4, [userId UTF8String], -1, NULL);

    

    

    //5.执行sql语句

    

    int step = sqlite3_step(stmt);

    if (step == SQLITE_ERROR) {

        NSLog(@"stmt执行失败!");

        //关闭数据库

        sqlite3_close(_sqlite);

        

        return NO;

    }

    

    //关闭数据库  关闭编译后的stmt

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    

    NSLog(@"更新成功");

    return YES;

}


2.6根据userId删除一条数据

- (BOOL)deleteDataWithUserId:(NSString *)userId{

    //1.打开数据库

    if (![self openTheDatabase]) {

        return NO;

    }

    

    //2.编写sql语句 value值需要绑定   ?代替

    NSString *sqlStr = @"delete from t_user where userId = ? ";


    //3.编译sql语句

    

    //声明stmt

    sqlite3_stmt *stmt = nil;

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    //编译不成功直接返回

    if (result != SQLITE_OK) {

        NSLog(@"编译失败");

        return NO;

    }

    

    //4.绑定参数

    sqlite3_bind_text(stmt, 1, [userId UTF8String], -1, NULL);

    

    //5.执行sql语句

    int step = sqlite3_step(stmt);

    if (step == SQLITE_ERROR) {

        NSLog(@"stmt执行失败!");

        //关闭数据库

        sqlite3_close(_sqlite);

        return NO;

    }

    

    //关闭数据库  关闭编译后的stmt

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    

    NSLog(@"删除成功");

    return YES;

}


3.demo地址https://github.com/gunmm/SQLiteDemo.git








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值