IOS 學習筆記 2015-04-09 0C-SQLite 資料存放區,iossqlite儲存圖片
1 項目匯入 libsqlite3.0.dylib 架構
2 在使用資料sqlite的標頭檔(.h)上匯入 #Impourt <sqlite3.h>
3 推薦自己本地電腦下個sqlite Manager 管理軟體類似的
下面上代碼
//// ViewController.m// SQLiteDemo//// Created by wangtouwang on 15/4/9.// Copyright (c) 2015年 wangtouwang. All rights reserved.//#import "ViewController.h"#import "WPUser.h"#define DBNAME @ "mysqlite.sqlite"@interface ViewController (){ sqlite3 *db;}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; [self createSqlDBOrOpenDB]; [self createTable]; // for (int index=0; index<30; index++) {// [self insertIntoData];// } [self updateData:[self searchAllData]]; }#pragma mark 更新資料 -(void)updateData:(NSMutableArray *)array{ NSString *sql = @"update user set name=?,age=? where id=?"; sqlite3_stmt *stmt; for (int index=0; index<array.count; index++) { WPUser *user = (WPUser *)array[index]; user.name=@"張建華"; user.age=31; if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL)==SQLITE_OK) { sqlite3_bind_text(stmt, 1, [user.name UTF8String], -1, NULL); sqlite3_bind_int(stmt, 2, user.age); sqlite3_bind_int(stmt, 3, user.ID); if (sqlite3_step(stmt)==SQLITE_DONE) { NSLog(@"更新成功"); } } }}#pragma mark 讀取資料 -(NSMutableArray *)searchAllData{ NSMutableArray *array = [NSMutableArray array]; NSString *sql = @"select id,name,age from user"; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL)==SQLITE_OK) { while (sqlite3_step(stmt)==SQLITE_ROW) { NSInteger ID = sqlite3_column_int(stmt, 0); char *name = (char*)sqlite3_column_text(stmt, 1); NSString *uname = [[NSString alloc] initWithUTF8String:name]; NSInteger age = sqlite3_column_int(stmt, 2); NSLog(@"ID=%lu NAME=%s AGE=%lu",ID,name,age); WPUser *user = [WPUser initUserName:uname Age:age]; user.ID=ID; [array addObject:user]; } } sqlite3_close(db); return array;}#pragma mark 新增資料-(void)insertIntoData{ NSString *sql = @"insert into user(name,age) values(?,?)"; WPUser *user = [WPUser initUserName:@"JACK" Age:11]; sqlite3_stmt *stmt; //插入資料前檢測文法是否正確 if ((sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL))==SQLITE_OK ) { //綁定參數 參數2:為序號(從1開始),參數3:為字串值,參數4 為字串長度。sqlite3_bind_text的第五個參數為一個函數指標 sqlite3_bind_text(stmt, 1, [user.name UTF8String], -1, NULL); sqlite3_bind_int(stmt, 2,user.age); //真正執行插入 sqlite3_step if (sqlite3_step(stmt)==SQLITE_DONE) { NSLog(@"INSERT INTO SUCCESS"); }else{ NSLog(@"INSERT INTO ERROR"); } }}#pragma mark 建立表 -(void)createTable{ NSString *sql = @"create table if not exists user (id integer primary key autoincrement,name text,age integer);"; char *errormsg; //執行建立語句 sqlite3_exex 是函數 參數一:資料庫的控制代碼(db),參數二: 為sql語句,參數三 回調參數,是一個指向函數的指標,如果把callback前面的*改成^則就是一個block程式碼片段, //參數四 可以寫NULL,第五個參數為錯誤資訊 //在這裡建立需要先判斷表是否已存在 int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &errormsg); if (result==SQLITE_OK) { NSLog(@"建立成功"); }else{ NSLog(@"建立失敗 願因是:%s",errormsg); }}#pragma mark 建立資料庫執行個體或者開啟資料執行個體-(void)createSqlDBOrOpenDB{ //擷取 項目 Doucment檔案目錄位址 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSLog(@"%@",doc); //建立 SQLITE 檔案或者擷取該檔案路徑 NSString *DB_PATH = [doc stringByAppendingPathComponent:DBNAME]; NSLog(@"%@",DB_PATH); //開啟或者建立DB執行個體 這裡用到C裡面的文法和指標 int result = sqlite3_open([DB_PATH UTF8String], &db);//sqlite3_open方法名 參數 const filename DB檔案路徑,第二個參數就是資料庫執行個體化對象 返回參數 int 類型 if(result!=SQLITE_OK){ sqlite3_close(db);//關閉執行個體化 NSLog(@"開啟資料哭執行個體化對象失敗"); }else{ NSLog(@"CREATE SUCCESS"); }}@end
//// WPUser.m// SQLiteDemo//// Created by wangtouwang on 15/4/9.// Copyright (c) 2015年 wangtouwang. All rights reserved.//#import "WPUser.h"@implementation WPUser-(instancetype)initUserName:(NSString *)name Age:(NSInteger)age{ if (self= [super init]) { self.name = name; self.age = age; } return self;}+(instancetype)initUserName:(NSString *)name Age:(NSInteger)age{ return [[WPUser alloc] initUserName:name Age:age];}@end