iOS 数据库SQLite

来源:互联网 发布:php报名系统 编辑:程序博客网 时间:2024/06/04 19:22

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,表创建成功后
这里写图片描述

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

0 0