您的位置:首页 > 数据库

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

2017-05-15 15:20 423 查看
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], NULL, NULL, &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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐