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:数据库指针
//参数2:sql语句
//参数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;
}
}
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;
}
//打开数据库
[dataBase openDB];
// 把收藏的内容给bookArray bookArray给tableView赋值
self.bookArray = [dataBase selectAll];
[self.bookTableView reloadData];
- IOS 用数据库收藏
- IOS 豆瓣--收藏 (数据库操作)
- ios开发收藏网址
- ios开发收藏链接
- IOS应用设计收藏
- iOS开发---网址收藏
- iOS开发---网址收藏
- iOS开发文章收藏
- iOS 技术博客收藏
- 收藏的iOS博客
- iOS 收藏功能
- 博客收藏 ios编程
- iOS 常用技术 收藏
- 收藏 - 传智iOS 视频
- hybrid iOS 信息收藏
- iOS常用控件收藏
- ios-临时收藏
- iOS博文收藏
- popupWindow简单用法实例
- 写给新入职的毕业生们
- DSP芯片的定点运算
- Imports Microsoft.Office.Interop
- LeetCode-Word Search
- IOS 用数据库收藏
- ios中KeyChain用途
- codeforces #260 A. Laptops(水)
- VS2013常用快捷键
- VS2012常用设置
- Android OpenGL ES 开发教程(5):关于EGL
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
- 工作第六天日志
- 说明: