FMDB的具體實現
//單例類#import "FMDatabase.h"static MyData *data = nil;static FMDatabase *db;@implementation MyData+ (instancetype)sharedData{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ data = [[MyData alloc] init]; [data createTable]; }); return data;}+ (instancetype)allocWithZone:(struct _NSZone *)zone{ if (data == nil) { data = [super allocWithZone:zone]; } return data;}- (void)createTable{ NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, 1) lastObject]; NSString *pathFile = [path stringByAppendingString:@"/*"]; NSLog(@"%@",pathFile); db = [[FMDatabase alloc] initWithPath:pathFile]; if ([db open]) { // CREATE TABLE IF NOT EXISTS student (ids integer PRIMARY KEY AUTOINCREMENT NOT NULL,name text,classes text,grade text NSString *createTable = @"create table student (ID integer primary key autoincrement, name text, age text, price text)"; if ([db executeUpdate:createTable]) { NSLog(@"創建成功"); [db close]; } else { NSLog(@"創建失敗"); } } else { // NSLog(@"創建失敗"); }}- (BOOL)addStudentData:(Student *)stu{ [db open]; BOOL result = [db executeUpdate:@"insert into student values (null,?,?,?)",*,*,*]; if (result) { NSLog(@"成功"); } else { NSLog(@"失敗"); } [db close]; return result;}- (BOOL)deleteData:(NSInteger)ID{ [db open]; BOOL result = [db executeUpdateWithFormat:@"delete from student where ID = %ld",ID]; if (result) { NSLog(@"刪除成功"); } else { NSLog(@"刪除失敗"); } [db close];return result;}- (BOOL)updata:(Student *)stu{ [db open]; BOOL result = [db executeUpdateWithFormat:@"update student set name = %@, age = %@ ,price = %@ where ID = %ld",*, *, *,*]; if (result) { NSLog(@"修改成功"); NSLog(@"==%@==",*); } else { NSLog(@"修改失敗"); } [db close]; return result;}- (NSMutableArray *)selectAllData{ [db open]; NSMutableArray *arr = [[NSMutableArray alloc] init]; FMResultSet *resuitSet = [db executeQuery:@"select * from student"]; while ([resuitSet next]) { Student *stu = [[Student alloc] init]; * = [resuitSet intForColumn:@"ID"]; * = [resuitSet stringForColumn:@"name"]; * = [resuitSet stringForColumn:@"age"]; * = [resuitSet stringForColumn:@"price"]; [arr addObject:stu]; } [db close]; return arr;}@end//ViewController#import "MyData.h"#import "AddViewController.h"@interface ViewController ()
數據庫 fmdb 簡書 為什么是 *
(一)FMDB的基本介紹FMDB 同時兼容ARC與非ARC工程,會自動根據功臣的配置來調整相關的內存管理。
FMDB常用類:FMDatabase:一個單一的數據庫,用于執行SQL語句FMResultSet:執行查詢一個FMDatabase的結果集FMDatabaseQueue:在多個線程來執行查詢和更新數據庫的數據(二)數據庫操作:創建數據庫建表(創建一張表)增(向表中插入新數據inset or replace into)刪(刪除表中數據delete)改 (修改數據庫中當前已有的數據update)查(查詢語句select)總結:數據庫增刪改等操作:除了查詢操作,FMDB數據庫操作都執行executeUpdate方法,這個方法返回BOOL型。數據庫查詢操作: 查詢操作使用了executeQuery,并涉及到FMResultSet。
(三)代碼學習在實際項目中一般使用databaseQueue,創建數據庫- (void)openDBWithFileName:(NSString *)fileName dbName:(NSString *)dbName{//首先判斷傳入的參數if (!* || !*) {return;}//獲取文件目錄NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, NO);NSString *documentDirectory =[paths firstObject];NSString *pathDirectory = nil;if (* !=0 ) {pathDirectory = [documentDirectory stringByAppendingPathComponent:fileName];}// 創建文件夾if (![[NSFileManager defaultManager] fileExistsAtPath:pathDirectory]) {NSError *error ;[[NSFileManager defaultManager] createDirectoryAtPath:pathDirectory withIntermediateDirectories:YES attributes:nil error:&error];//參數YES,表示不管有沒有這個文件夾都會去創建,如果參數為no,則 只會在沒有這個文件夾的時候才會創建if (error) {NSLog(@"%@",[error description]);}}//創建數據庫NSString *dbPath = [pathDirectory stringByAppendingPathComponent:dbName];if (!_dbQueue) {NSLog(@"%@",[FMDatabaseQueue databaseQueueWithPath:dbPath]);*e = [FMDatabaseQueue databaseQueueWithPath:dbPath];NSLog(@"%@__open",*e);}}插入數據。
ios fmdb為什么存不上數據
一、簡單說明1.什么是FMDBFMDB是iOS平臺的SQLite數據庫框架FMDB以OC的方式封裝了SQLite的C語言*的優點使用起來更加面向對象,省去了很多麻煩、冗余的C語言代碼對比蘋果自帶的Core Data框架,更加輕量級和靈活提供了多線程安全的數據庫操作方法,有效地防止數據混亂*的github地址https://**ccgus/fmdb二、核心類FMDB有三個主要的類(1)FMDatabase一個FMDatabase對象就代表一個單獨的SQLite數據庫用來執行SQL語句(2)FMResultSet使用FMDatabase執行查詢后的結果集(3)FMDatabaseQueue用于在多線程中執行多個查詢或更新,它是線程安全的三、打開數據庫通過指定SQLite數據庫文件路徑來創建FMDatabase對象FMDatabase *db = [FMDatabase databaseWithPath:path];if (![db open]) { NSLog(@"數據庫打開失敗!");}文件路徑有三種情況(1)具體文件路徑 如果不存在會自動創建(2)空字符串@"" 會在臨時目錄創建一個空的數據庫 當FMDatabase連接關閉時,數據庫文件也被刪除(3)nil 會創建一個內存中臨時數據庫,當FMDatabase連接關閉時,數據庫會被銷毀四、執行更新在FMDB中,除查詢以外的所有操作,都稱為“更新”create、drop、insert、update、delete等使用executeUpdate:方法執行更新- (BOOL)executeUpdate:(NSString*)sql, 。
- (BOOL)executeUpdateWithFormat:(NSString*)format, 。- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments示例[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]五、執行查詢查詢方法- (FMResultSet *)executeQuery:(NSString*)sql, 。
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, 。- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments示例// 查詢數據FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];// 遍歷結果集while ([rs next]) { NSString *name = [rs stringForColumn:@"name"]; int age = [rs intForColumn:@"age"]; double score = [rs doubleForColumn:@"score"];}六、代碼示例1.新建一個項目,導入libsqlite3庫,并在項目中包含主頭文件2.下載第三方框架FMDB 3.示例代碼 YYViewController.m文件1 // 2 // YYViewController.m 3 // 04-FMDB基本使用 4 // 5 // Created by apple on 14-7-27. 6 // Copyright (c) 2014年 wendingding. All rights reserved. 7 // 8 9 #import "YYViewController.h"10 #import "FMDB.h"11 12 @interface YYViewController ()13 @property(nonatomic,strong)FMDatabase *db;14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20 [super viewDidLoad];21 //1.獲得數據庫文件的路徑22 NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];23 NSString *fileName=[doc stringByAppendingPathComponent:@"*"];24 25 //2.獲得數據庫26 FMDatabase *db=[FMDatabase databaseWithPath:fileName];27 28 //3.打開數據庫29 if ([db open]) {30 //4.創表31 BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];32 if (result) {33 NSLog(@"創表成功");34 }else35 {36 NSLog(@"創表失敗");37 }38 }39 *=db;40 41 }42 43 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event44 {45 [self delete];46 [self insert];47 [self query];48 }49 50 //插入數據51 -(void)insert52 {53 for (int i = 0; i<10; i++) {54 NSString *name = [NSString stringWithFormat:@"jack-%d", arc4random_uniform(100)];55 // executeUpdate : 不確定的參數用?來占位56 [* executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", name, @(arc4random_uniform(40))];57 // [* executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);" withArgumentsInArray:@[name, @(arc4random_uniform(40))]];58 59 // executeUpdateWithFormat : 不確定的參數用%@、%d等來占位60 // [* executeUpdateWithFormat:@"INSERT INTO t_student (name, age) VALUES (%@, %d);", name, arc4random_uniform(40)];61 }62 }63 64 //刪除數據65 -(void)delete66 {67 // [* executeUpdate:@"DELETE FROM t_student;"];68 [* executeUpdate:@"DROP TABLE IF EXISTS t_student;"];69 [* executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];70 }71 72 //查詢73 - (void)query74 {75 // 1.執行查詢語句76 FMResultSet *resu。
iOS的SQLite利用FMDB進行操作時無法打開數據庫
SQLite基本使用
使用步驟:
1.導入系統框架(C語言). (libsqlite3)
2.文件#import.
3. sqlite3_open(*8String, &_db); 打或者創建數據
*_db自定義sqlite3員變量.進行刪改查要用.
*3_exec(_db, sql, NULL, NULL,&error);
*該函數進行insert,delete,update操作.
5.查詢操作select.
*sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);做查詢前準備,檢測SQL語句否確.
*sqlite3_step(stmt) 提取查詢數據,提取條.
*sqlite3_column_text(stmt, 0)取第0列數據.