iOS 数据库SQLite

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28142539/article/details/51141839

SQLite介绍

SQLite是一款轻型的嵌入式数据库,安卓和iOS开发使用的都是SQLite数据库。

它的特点:

  • 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • 它的处理速度比MySQL、PostgreSQL这两款著名的数据库都还快。
  • 它是C语言框架的,跨平台性强。

要在iOS中使用SQLite3,需要在Xcode导入libsqlite3的库

这里写图片描述

下面是结合SQL语句完成数据库操作,使用到的是下面定义的方法:

创建表:
create table 表名称(字段1,字段2,……,字段n,[表级约束])[TYPE=表类型];
插入记录:
insert into 表名(字段1,……,字段n) values (值1,……,值n);
删除记录:
delete from 表名 where 条件表达式;
修改记录:
update 表名 set 字段名1=值1,……,字段名n=值n where 条件表达式;
查看记录:
select 字段1,……,字段n  from  表名 where 条件表达式;

1,打开数据库
使用的C语言函数如下:

/* 打开数据库 */
int sqlite3_open(
  const char *filename,   /* 数据库路径(UTF-8) */
  sqlite3 **pDb           /* 返回的数据库句柄 */
);

2,查询数据库
使用的C语言函数:

/* 执行有返回结果的SQL语句 */
int sqlite3_prepare_v2(
  sqlite3 *db,            /* 数据库句柄 */
  const char *zSql,       /* SQL语句(UTF-8) */
  int nByte,              /* SQL语句最大长度,-1表示SQL支持的最大长度 */
  sqlite3_stmt **ppStmt,  /* 返回的查询结果 */
  const char **pzTail     /* 返回的失败信息*/
);

3,插入数据
使用的C语言函数:

/* 执行有返回结果的SQL语句 */
int sqlite3_prepare(
  sqlite3 *db,            /* 数据库句柄 */
  const char *zSql,       /* SQL语句(UTF-8) */
  int nByte,              /* SQL语句最大长度,-1表示SQL支持的最大长度 */
  sqlite3_stmt **ppStmt,  /* 返回的查询结果 */
  const char **pzTail     /* 返回的失败信息*/
);

4.删除数据库
使用的C语言函数:

/* 执行没有返回的SQL语句 */
int sqlite3_exec(
  sqlite3 *db,                               /* 数据库句柄 */
  const char *sql,                           /* SQL语句(UTF-8) */
  int (*callback)(void*,int,char**,char**),  /* 回调的C函数指针 */
  void *arg,                                 /* 回调函数的第一个参数 */
  char **errmsg                              /* 返回的错误信息 */
);

5, 关闭数据库
使用的C语言函数:

/* 关闭数据库 */
int sqlite3_close(sqlite3 *db);

下面来个小例子:

这里请求数据是微博的用户名和id 定义一个模型

DataModel.h

#import <Foundation/Foundation.h>

@interface DataModel : NSObject

@property (nonatomic, copy) NSString *screen_name;
@property (nonatomic, copy) NSString *avatar_hd;

- (instancetype)initWithDictionary:(NSArray *)dictionary;

@end

DataModel.m


#import "DataModel.h"

@implementation DataModel

- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
    if (self = [super init]) {
        // 当有很多属性 一个一个的写 太麻烦了,
        // 一句话搞定
        [self setValuesForKeysWithDictionary:dictionary];
    }
    return self;
}
// 一般情况下 请求数据回来,里面包含很多数据,要一个一个的写,写错了一个就报错
// 请求数据回来有很多,但你又用不上,就写上这个方法
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    // 打印的是 你没用到的key
    NSLog(@"%@",key);
}
@end

在定义一个处理数据库的类 DataBase

DataBase.h

#import <Foundation/Foundation.h>

/** 导入DataModel*/
#import "DataModel.h"

@interface DataBase : NSObject

/** 打开数据库*/
+ (void)openDB;

/** 查*/
+ (NSArray *)find;

/** 插*/
+ (BOOL)insertModel:(DataModel *)dataModel;
+ 
/** 删除*/
+ (BOOL)deleteModel:(DataModel *)dataModel;

@end

DataBase.m

#import "DataBase.h"
// 导入
#import <sqlite3.h>


@implementation DataBase
// 创建一个数据库对象
static sqlite3 *db;

#pragma mark - 打开数据库
+ (void)openDB {
    // 将导入的数据库移动到 Documents 文件夹下
    // 首先要在外面创建一个数据库 把数据库导入工程里面 "这一步 一定要做"
    // 拿到数据库的路径
    // 这里 WeiBo 是创建数据库的名称 (千万不要搞错)
    NSString *originPath = [[NSBundle mainBundle] pathForResource:@"WeiBo" ofType:@"sqlite"];

    // Documents  文件夹下的路径  然后进行拼接
    NSString *targetPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"collection.sqlite"];

    NSFileManager *manager = [NSFileManager defaultManager];

    if (![manager fileExistsAtPath:targetPath]) {
        [manager moveItemAtPath:originPath toPath:targetPath error:nil];
    }

    char *filename = (char *)[targetPath UTF8String];

    // 打开数据库
    int result = sqlite3_open(filename, &db);

    if (result == SQLITE_OK) {
        NSLog(@"数据库开启成功");
    } else {
        NSLog(@"数据库开启失败");
    }
}

#pragma mark - 查
+ (NSArray *)find {
    NSMutableArray *mArray = [NSMutableArray array];

    // 打开数据库
    [self openDB];
    // 声明一个陈述
    sqlite3_stmt *stmt = nil;
    // 查表
    // 这里 weiBo 是创建数据库下的表名称 (千万不要搞错)
    const char *sql = "select *from weiBo";
    // 将sql 文本转成一个 语句对象
    int result = sqlite3_prepare_v2(db, sql, -1, &stmt, nil);

    if (result == SQLITE_OK) {
        NSLog(@"准备查询成功");

        while (sqlite3_step(stmt) == SQLITE_ROW) {

            // 提取数据
            const char *screen_name = (const char *)sqlite3_column_text(stmt, 0);
            const char *avatar_hd = (const char *)sqlite3_column_text(stmt, 1);

            DataModel *dataModel = [[DataModel alloc] init];

            dataModel.screen_name = [NSString stringWithCString:screen_name encoding:4];
            dataModel.avatar_hd = [NSString stringWithCString:avatar_hd encoding:4];
            //"NSNumber  类型  " [NSNumber numberWithInteger:[[NSString stringWithCString:deal_id encoding:4] integerValue]];

            [mArray addObject:dataModel];
        }
    }
    return mArray;
}

#pragma mark - 插
+ (BOOL)insertModel:(DataModel *)dataModel {

    // 打开数据库
    [self openDB];

    sqlite3_stmt *stmt = nil;

    // 这里 weiBo 是创建数据库下的表名称 (千万不要搞错)
    const char *sql = "insert into weiBo(screen_name, avatar_hd) values(?, ?)";
    // 将 sql 文本转换成一个 语句对象
    int result = sqlite3_prepare(db, sql, -1, &stmt, nil);

    if (result == SQLITE_OK) {
        //将要插入的数据插入到数据库
        sqlite3_bind_text(stmt, 1, [dataModel.screen_name UTF8String], -1, nil);
        sqlite3_bind_text(stmt, 2, [dataModel.avatar_hd UTF8String], -1, nil);

        //[NSNumber]  sqlite3_bind_text(stmt, 1, [[NSString stringWithFormat:@"%@",model.comment_num] UTF8String], -1, nil);

        if (sqlite3_step(stmt) == SQLITE_DONE) {
            flag = YES;
        }
    }

    return flag;
}

#pragma mark - 删 
+ (BOOL)deleteModel:(DataModel *)dataModel {
    BOOL flag = NO;

    // 打开数据库
    [self openDB];

    // 这里 weiBo 是创建数据库下的表名称 (千万不要搞错)
    NSString *sql = [NSString stringWithFormat:@"delete from weiBo where screen_name = %@", dataModel.screen_name];

    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);

    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
        flag = YES;
    } else {
        NSLog(@"删除失败");
    }
    return flag;
}

@end

创建数据库

(用火狐浏览器)
1,SQLite Manager下载

这里写图片描述


2,创建数据库有几种方法(这理就不一一介绍了) 我的是火狐浏览器里面的数据库
打开浏览器 –> 工具 –> 找到SQLite Manager
这里写图片描述


3,点击:SQLite Manager 页面是这样
这里写图片描述


4,创建数据库
这里写图片描述


5,桌面 把它拖到工程中
这里写图片描述


6,创建数据库的表(表里面创建字段 可以理解为属性)
这里写图片描述
这里写图片描述


7,表创建成功后
这里写图片描述

图片截的有点模糊 请见谅 。
有问题请留言.
哪里写错了请指导指导 谢谢…..

猜你喜欢

转载自blog.csdn.net/qq_28142539/article/details/51141839