美文网首页
sqlite数据库

sqlite数据库

作者: 71150ce14a00 | 来源:发表于2016-05-23 13:53 被阅读35次

    .h

    #import#import#import "Product.h"

    @interface DataBase : NSObject

    {

    sqlite3 *dbPoint;

    }

    // 想要在任何一个类中使用同一个数据库 把数据库管理类写成一个单例

    + (DataBase *)shareInstance;

    // 数据库操作步骤: 打开数据库-->创建表(只需要创建一次) --> 操作数据(增删改查) --> 关闭数据库

    // 打开数据库

    - (void)openDB;

    // 关闭数据库

    - (void)closeDB;

    // 创建表

    - (void)createTable;

    // 添加数据

    - (void)insertInfoWithLanouStu:(Product *)product;

    // 删除数据

    - (void)deleteInfoWithNum:(NSString *)pID;

    //查询

    - (NSMutableArray *)selectInfo;

    // 删除表

    - (void) dropTable;

    // 修改

    - (void)updateInfoLanouStu:(Product *)product pID:(NSString *)pID;

    @end


    .m

    //

    //  DataBase.m

    //  LazyCat

    //

    //  Created by jike on 15/10/21.

    //  Copyright (c) 2015年 zhanshu. All rights reserved.

    //

    #import "DataBase.h"

    @implementation DataBase

    +(DataBase *)shareInstance

    {

    // 通过GCD多线程 实现单例

    static DataBase *dbManager = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    dbManager = [[DataBase alloc]init];

    });

    return dbManager;

    }

    // 打开数据库

    -(void)openDB

    {

    //数据库在本地创建一个数据文件 一般存放在 documents 文件下

    // 获取documents路径

    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;

    NSLog(@"------------%@",path);

    // 拼接数据库路径(后缀.db/.sqlite)

    NSString *dbPath = [path stringByAppendingPathComponent:@"product.db"];

    // 创建数据库

    // 数据库打开函数 会检测路径下 是否已经存在数据库(看dbPointer指针 是否指向了数据库) 如果不存在 则创建一个新的数据库 如果存在 直接打开原有的数据库

    // 参数1: 本地数据库路径(UTF-8转码)

    // 参数2: 数据库指针

    int result = sqlite3_open([dbPath UTF8String], &dbPoint);

    NSLog(@"打开结果:%d, path:%@",result, dbPath);

    }

    // 关闭数据库

    - (void)closeDB

    {

    sqlite3_close(dbPoint);

    }

    // 创建表

    - (void)createTable

    {

    // 1. 创建sql语句

    // create table 创建表

    // if not exists 如果不存在

    // primary key 主键 (用来作为每一条信息的唯一标识)

    // autoincrement 自增

    NSString *createSQL = @"create table if not exists product (name text, pID text,pCount text,pyuding text, num integer primary key autoincrement)";

    // 2. 执行语句

    // 参数1: 数据库指针

    // 参数2: sql语句(oc转码c)

    int result = sqlite3_exec(dbPoint, createSQL.UTF8String, NULL, NULL, NULL);

    // 3. 判断

    //    if (result == SQLITE_OK) {

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

    //    }else{

    //        NSLog(@"创建表失败,原因%d",result);

    //    }

    [self judgeResult:result type:@"创建表"];

    }

    // 添加方法

    - (void)insertInfoWithLanouStu:(Product *)product

    {

    // 1. 创建sql语句

    NSString *insertSQL = [NSString stringWithFormat:@"insert into product (name, pID, pCount,pyuding) values ('%@','%@','%@', '%@')",product.name,product.pID,product.pCount,product.pyuding];

    // 2.执行

    int result = sqlite3_exec(dbPoint, insertSQL.UTF8String, NULL, NULL, NULL);

    // 3. 判断

    [self judgeResult:result type:@"插入"];

    }

    // 删除数据

    -(void)deleteInfoWithNum:(NSString *)pID

    {

    // 1. sql语句

    // 从哪个表删除

    NSString *deleteSQL = [NSString stringWithFormat:@"delete from product where pID = '%@'",pID];

    // 2. 执行

    int result = sqlite3_exec(dbPoint, deleteSQL.UTF8String, NULL, NULL, NULL);

    // 3. 判断

    [self judgeResult:result type:@"删除"];

    }

    // 查询数据

    - (NSMutableArray *)selectInfo

    {

    // 查询操作逻辑

    // 1.从本地数据所有信息 遍历获取每条信息

    // 2. 把每条信息 转化为model对象

    // 3. 把model添加到数值进行返回

    // 1. sql语句

    NSString *selectSQL = @"select * from product";

    // 2. 创建数据库替身

    sqlite3_stmt *stmt = nil;

    // 3. 准备sql语句

    // prepare_v2函数 把数据库对象(dbPointer)/sql语句/数据库替身 关联一起

    int result = sqlite3_prepare_v2(dbPoint, selectSQL.UTF8String, -1, &stmt, nil);

    // 4. 创建用于返回数据的数组

    NSMutableArray *arr = [NSMutableArray array];

    // 5. 判断查询准备是否成功

    if (result == SQLITE_OK) {

    NSLog(@"查询准备成功");

    // 6. 开始遍历每一行信息

    while (sqlite3_step(stmt) == SQLITE_ROW) {

    // 当数据库替身指向的数据符合查询条件 在while中返回

    // 逐行获取每一列信息

    // 列数 从0开始

    const unsigned char *name = sqlite3_column_text(stmt, 0);

    const unsigned char *pid = sqlite3_column_text(stmt, 1);

    const unsigned char *pcount = sqlite3_column_text(stmt, 2);

    const unsigned char *pyuding = sqlite3_column_text(stmt, 3);

    // 把获取到的数据信息保存在model中

    Product *temp = [[Product alloc]init];

    temp.name = [NSString stringWithUTF8String:(const char *)name];

    temp.pID = [NSString stringWithUTF8String:(const char *)pid];

    temp.pCount = [NSString stringWithUTF8String:(const char *)pcount];

    temp.pyuding = [NSString stringWithUTF8String:(const char *)pyuding];

    // 添加到数组中

    [arr addObject:temp];

    }

    }else{

    NSLog(@"查询准备失败,原因:%d",result);

    }

    return  arr;

    }

    // 删除表

    - (void)dropTable

    {

    // 1. sql语句

    NSString *dropSQL = @"drop table product";

    // 2. 执行

    int result = sqlite3_exec(dbPoint, dropSQL.UTF8String, NULL, NULL, NULL);

    // 3. 判断

    [self judgeResult:result type:@"删除表"];

    }

    // 修改表

    - (void)updateInfoLanouStu:(Product *)product pID:(NSString *)pID

    {

    // 1. 创建sql语句

    NSString *updateSQL = [NSString stringWithFormat:@"update product set pCount = '%@' where pID = '%@'",product.pCount,pID];

    // 2. 执行

    int result = sqlite3_exec(dbPoint, updateSQL.UTF8String, NULL, NULL, NULL);

    // 3. 判断

    [self judgeResult:result type:@"修改"];

    }

    // 判断方法

    - (void)judgeResult:(int)r type:(NSString *)type

    {

    if (r == SQLITE_OK) {

    NSLog(@"%@操作成功",type);

    }else{

    NSLog(@"%@操作失败,原因:%d",type,r);

    }

    }

    @end

    相关文章

      网友评论

          本文标题:sqlite数据库

          本文链接:https://www.haomeiwen.com/subject/exparttx.html