IOS 用数据库收藏

来源:互联网 发布:一起来做淘宝 编辑:程序博客网 时间:2024/06/06 00:02

// 收藏小说的基本信息   展示在tableView上


// 自定义类Book

// Book.h

@interface Book : NSObject


@property (nonatomic, copy)NSString *name;

@property (nonatomic, copy)NSString *kind;

@property (nonatomic, copy)NSString *author;

@property (nonatomic, copy)NSString *picture;


@property (nonatomic, copy)NSString *brief;

@end



// 自定义 DataBaseManager

// DataBaseManager.h

// 引入 第三方类库 sqlite3

#import <sqlite3.h>

#import "Book.h"


@interface DataBaseManager :NSObject

{

    // 创建一个成员变量 作用:用于开发者访问数据库文件

    sqlite3 *dbPoint;

}


// 单例类的写法

// 单例的初始化 依靠一个类方法

+ (DataBaseManager *)shareInstance;


- (void)openDB; // 打开数据库

- (void)closeDB; //关闭数据库

- (BOOL)createTable;  // 创建表

- (BOOL)insertObject:(Book *)book;  //插入一条数据

- (BOOL)delectObject:(Book *)book; // 删除一条数据

- (NSMutableArray *)selectAll; //查找所有的数据


@end



// DataBaseManager.m


@implementation DataBaseManager


+ (DataBaseManager *)shareInstance

{

    //利用static的特性第一次调用这个方法时,将指针置为空

    static DataBaseManager *dataBase = nil;

    if (nil == dataBase) {

        dataBase = [[DataBaseManager alloc] init];

    }

    return dataBase;

}


// 打开数据库

- (void)openDB

{

   //产生Documents地址

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    

    //拼接一个数据库文件的地址

    NSString *dbPath = [docPath stringByAppendingString:@"/lanou.db"];

    

    //检测给定的路径理中是否有数据库文件,如果有, 直接将sqlite3数据库指向它;如果没有,就在该路径下创建一个数据库文件

    // 参数1:本地数据库文件的路径(const char*)

    //参数2:数据库指针地址

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

}



//关闭数据库

- (void)closeDB

{

    sqlite3_close(dbPoint);

}

// 创建表

- (BOOL)createTable

{

    

    // 1.数据库的替身,用于临时存储数据和操作

    sqlite3_stmt *stmt = nil;

    // 2.准备sql语句

    //参数1:数据库指针

    //参数2sql语句

    //参数3: sql语句的长度限制(-1为不限制)

    //参数4:数据库的替身地址

    // 返回值:检查sql语句是否正确

    int result = sqlite3_prepare_v2(dbPoint, "create table book (name text, kind text, author text, picture text, brief text primary key)", -1, &stmt, NULL);

    

    // 3.sql语句的检查结果做判断

    if (SQLITE_OK == result) {

        // 4.执行sql语句

        int r = sqlite3_step(stmt);

       //对执行结果判断正确条件为  SQLTIE_DONE

        if (SQLITE_DONE == r) {

           //  5. 销毁替身

            sqlite3_finalize(stmt);

            return YES;

        }

    }

    sqlite3_finalize(stmt);

    return NO;

}

// 插入数据

- (BOOL)insertObject:(Book *)book

{

    sqlite3_stmt *stmt = nil;

    int result = sqlite3_prepare_v2(dbPoint, "insert into book values(?, ?, ?, ?, ?)", -1, &stmt, NULL);

    sqlite3_bind_text(stmt, 1, [book.name UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 2, [book.kind UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 3, [book.author UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 4, [book.picture UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 5, [book.brief UTF8String], -1, NULL);

   

      if (SQLITE_OK == result) {

        if (SQLITE_DONE == sqlite3_step(stmt)) {

            sqlite3_finalize(stmt);

            return YES;

        }

    }

    sqlite3_finalize(stmt);

    return NO;

}

// 删除数据

- (BOOL)delectObject:(Book *)book

{

    sqlite3_stmt *stmt = nil;

    int result = sqlite3_prepare_v2(dbPoint, "delete from book where name = ?", -1, &stmt, NULL);

    sqlite3_bind_text(stmt, 1, [book.name UTF8String], -1, NULL);

    

    if (SQLITE_OK == result) {

        if (SQLITE_DONE == sqlite3_step(stmt)) {

            sqlite3_finalize(stmt);

            return YES;

        }

    }

    sqlite3_finalize(stmt);

    return NO;

}

// 查找数据

- (NSMutableArray *)selectAll

{

    sqlite3_stmt *stmt = nil;

    int result = sqlite3_prepare_v2(dbPoint, "select * from book", -1, &stmt, NULL);

    

    if (SQLITE_OK == result) {

       //查找所有的数据

        //所有在while循环中的数据都是符合搜索条件的

        //在循环中获取每一条数据的值

        NSMutableArray *arr = [NSMutableArray array];

        while (SQLITE_ROW == sqlite3_step(stmt)) {

            //按照列提取数据

            // 参数1: 数据库替身

            //参数2:第几列

            

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

            //char *转为NSString类型

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

            

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

            //char *转为NSString类型

            NSString *kindStr = [NSString stringWithUTF8String:(const char *)kind];

            

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

           //char *转为NSString类型

            NSString *authorStr = [NSString stringWithUTF8String:(const char *)author];

            

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

            //char *转为NSString类型

            NSString *pictureStr = [NSString stringWithUTF8String:(const char *)picture];

            

            const unsigned char *brief = sqlite3_column_text(stmt, 4);

            //char *转为NSString类型

            NSString *briefStr = [NSString stringWithUTF8String:(const char *)brief];

            

            Book *book = [[Book alloc] init];

            book.name = nameStr;

            book.kind = kindStr;

            book.author = authorStr;

            book.picture = pictureStr;

            book.brief = briefStr;

           

            [arr addObject:book];//添加到数组

            [book release];

        }

        sqlite3_finalize(stmt);

       //将装满 stdent对象/字典的数组返回

        return arr;

    }

    sqlite3_finalize(stmt);

    return [NSMutableArray array];

}

@end



AppDelegate.h

#import <sqlite3.h>

#import "DataBaseManager.h"


    //单例对象的创建

    DataBaseManager *dataBase = [DataBaseManager shareInstance];

    //打开数据库

    [dataBase openDB];

   // 创建表

    [dataBase createTable];




MainViewController.h

#import "DataBaseManager.h"

#import <sqlite3.h>

#import "Book.h"


// 自定义Flag全局变量

int Flag = 0;



1.DataBaseManager *dataBase = [DataBaseManager shareInstance];

    //打开数据库

    [dataBase openDB];

// 如果收藏已被收藏的书就变图片

NSMutableArray *arr = [dataBase selectAll];

    Book *book = [[Book alloc] init];

    

    for (int i = 0 ; i < [arr count]; i ++) {

        book = [arr objectAtIndex:i];

        if ([self.title isEqualToString:book.name]) {

            Flag = 1;

        }

    }



// 2.自定义收藏按钮


// 点击收藏按钮触发方法内容

DataBaseManager *db = [DataBaseManager shareInstance];

    [db openDB];

    

    Book *book = [[Book alloc] init];

    book.picture = self.image100;

    book.name = self.title;

    book.kind = self.title2;

    book.author = self.title3;

    book.brief = self.title4;


    if (0 == Flag) {

        [db insertObject:book];

        [self.collectButton setImage:[UIImage imageNamed:@"iconfont-yishoucang-2111.png"] forState:UIControlStateNormal];

        Flag = 1;

    } else {

        [db delectObject:book];

        [self.collectButton setImage:[UIImage imageNamed:@"iconfont-jiashoucang12.png"] forState:UIControlStateNormal];

        Flag = 0;

    }





collectViewController.h

 DataBaseManager *dataBase = [DataBaseManagershareInstance];

    //打开数据库

    [dataBase openDB];

// 把收藏的内容给bookArray bookArray给tableView赋值

    self.bookArray = [dataBase selectAll];

    [self.bookTableView reloadData];




0 0