iOS -- SQLite 實現 收藏功能
1.首先導入libsqlite3.0.dylib,libz.dylib兩個類庫;
2.封裝一個NSObject類型的工具類(DataBaseManager)去管理 (即寫sql語句)
在這個類裏首先導入一個頭文件和你建好的model類 (實現收藏本質是存model類)
在model類的.h文件中聲明需要收藏的字符串
在DataBaseManager.h文件中,聲明方法:
+(void)open; // 打開數據庫
+ (void)close; // 關閉數據庫
+(void)create; // 創建表
+ (void)insert:(Model*)model; // 插入模型數據
+ (void)remove:(Model*)model; // 刪除模型數據
+ (void)update; // 修改模型數據
+ (NSArray *)select; // 查詢模型數據
在DataBaseManager.m中實現聲明的方法
#import "DataBaseManager.h"
static sqlite3 *dbPoint = nil;
@implementation DataBaseManager
+ (void)open
{
if (dbPoint) {
return;
}
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
path = [path stringByAppendingPathComponent:@"travel_Topic.rdb"];
NSLog(@"%@", path);
int result = sqlite3_open(path.UTF8String, &dbPoint);
if (result == SQLITE_OK) {
NSLog(@"數據庫打開成功");
}
}
+ (void)close
{
sqlite3_close(dbPoint);
}
+ (void)create
{
[self open];
NSString *sql = @"create table travel_Topic (title text, name text, image text, id text)";
sqlite3_exec(dbPoint, sql.UTF8String, NULL, NULL, NULL);
}
+ (void)insert:(Model*)model
{
[self open];
NSString *sql = [NSString stringWithFormat:@"insert into travel_Topic values ('%@','%@','%@','%@')", model.topic_title ,model.topic_name, model.topic_image, model.topic_id];
sqlite3_exec(dbPoint, sql.UTF8String, NULL, NULL, NULL);
}
+ (void)remove:(Model*)model
{
[self open];
NSString *sql = [NSString stringWithFormat:@"delete from travel_Topic where title = '%@'",model.topic_title];
sqlite3_exec(dbPoint, sql.UTF8String, NULL, NULL, NULL);
}
+ (void)update
{
[self create];
NSString *sql = @"update travel_Topic set name = '汲國興250' where number = '250'";
sqlite3_exec(dbPoint, sql.UTF8String, NULL, NULL, NULL);
}
+ (NSArray *)select
{
[self open];
//創建數據庫替身
sqlite3_stmt *stmt = nil;
NSString *sql = @"select * from travel_Topic";
//執行語句
int result = sqlite3_prepare_v2(dbPoint, sql.UTF8String, -1, &stmt, NULL);
//判斷是否成功
if (result == SQLITE_OK) {
//創建數組用來保存查詢的數據
NSMutableArray *arr = [NSMutableArray array];
//如果還有下一行
while (sqlite3_step(stmt) == SQLITE_ROW) {
//獲取數據
const unsigned char * topic_title = sqlite3_column_text(stmt, );
const unsigned char * topic_name = sqlite3_column_text(stmt, 1);
const unsigned char * topic_image = sqlite3_column_text(stmt, 2);
const unsigned char * topic_id = sqlite3_column_text(stmt, 3);
//封裝成model
Model*model = [[Model alloc] init];
model.topic_title = [NSString stringWithUTF8String:(const char *) topic_title];
model.topic_name = [NSString stringWithUTF8String:(const char *) topic_name];
model.topic_image = [NSString stringWithUTF8String:(const char *) topic_image];
model.topic_id = [NSString stringWithUTF8String:(const char *) topic_id];
[arr addObject:model];
}
sqlite3_finalize(stmt); //釋放數據庫替身
return arr;
}
sqlite3_finalize(stmt);
return [NSMutableArray array];
}
3.在所需的頁面創建一個收藏按鈕,編寫一個點擊事件的方法(將相應的信息存到model類裏)
如下:
-(void)collectionButton
{
//創建數據庫 數據庫內同一個表不會疊加 所以放心建。
[DataBaseManager create];
//初始化model類存所需數據
Model*model = [[Model alloc]init];
model.topic_title = _str2;
model.topic_name = _str1;
model.topic_image = _str;
model.topic_id = [NSString stringWithFormat:@"%lu", _Travel_Topic_Sub_Id];
//alert提示框
_alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"已收藏