【代碼筆記】iOS-FMDBDemo,筆記ios-fmdbdemo
一,。
二,工程圖。
三,代碼。
ViewController.h
#import <UIKit/UIKit.h>#import "FMDatabase.h"#import "FMDatabaseQueue.h"@interface ViewController : UIViewController{ FMDatabase *db; NSString *database_path; }@end
ViewController.m
#import "ViewController.h"#define DBNAME @"personinfo.sqlite"#define ID @"id"#define NAME @"name"#define AGE @"age"#define ADDRESS @"address"#define TABLENAME @"PERSONINFO"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //初始化資料庫存放目錄 [self addDocumentPath]; //初始化介面 [self addView]; [super viewDidLoad];}#pragma -mark -functions//初始化資料庫存放目錄-(void)addDocumentPath{ //獲得Documents目錄 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documents = [paths objectAtIndex:0]; NSLog(@"--documents--%@",documents); //添加/號,使之變成一個完整的路徑 database_path = [documents stringByAppendingPathComponent:DBNAME]; NSLog(@"--database_path---%@",database_path); db = [FMDatabase databaseWithPath:database_path];}//初始化使用者介面-(void)addView{ //建立資料庫 UIButton *createBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; createBtn.frame=CGRectMake(60, 60, 200, 50); [createBtn addTarget:self action:@selector(doClickCreateButton) forControlEvents:UIControlEventTouchUpInside]; [createBtn setTitle:@"createTable" forState:UIControlStateNormal]; [self.view addSubview:createBtn]; //插入資料庫 UIButton *insterBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; insterBtn.frame=CGRectMake(60, 130, 200, 50); [insterBtn addTarget:self action:@selector(doClickInsertButton) forControlEvents:UIControlEventTouchUpInside]; [insterBtn setTitle:@"insert" forState:UIControlStateNormal]; [self.view addSubview:insterBtn]; //更新資料庫 UIButton *updateBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; updateBtn.frame=CGRectMake(60, 200, 200, 50); [updateBtn addTarget:self action:@selector(doClickUpdateButton) forControlEvents:UIControlEventTouchUpInside]; [updateBtn setTitle:@"update" forState:UIControlStateNormal]; [self.view addSubview:updateBtn]; //刪除資料庫 UIButton *deleteBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; deleteBtn.frame=CGRectMake(60, 270, 200, 50); [deleteBtn addTarget:self action:@selector(doClickDeleteButton) forControlEvents:UIControlEventTouchUpInside]; [deleteBtn setTitle:@"delete" forState:UIControlStateNormal]; [self.view addSubview:deleteBtn]; //查看資料庫 UIButton *selectBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; selectBtn.frame=CGRectMake(60, 340, 200, 50); [selectBtn addTarget:self action:@selector(doClickSelectButton) forControlEvents:UIControlEventTouchUpInside]; [selectBtn setTitle:@"select" forState:UIControlStateNormal]; [self.view addSubview:selectBtn]; //多線程 UIButton *multithreadBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; multithreadBtn.frame=CGRectMake(60, 410, 200, 50); [multithreadBtn addTarget:self action:@selector(doClickMultithreadButton) forControlEvents:UIControlEventTouchUpInside]; [multithreadBtn setTitle:@"multithread" forState:UIControlStateNormal]; [self.view addSubview:multithreadBtn]; }#pragma -mark -doClickAction//建立資料庫- (void)doClickCreateButton{ //sql 語句 if ([db open]) { NSString *sqlCreateTable = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' INTEGER PRIMARY KEY AUTOINCREMENT, '%@' TEXT, '%@' INTEGER, '%@' TEXT)",TABLENAME,ID,NAME,AGE,ADDRESS]; BOOL res = [db executeUpdate:sqlCreateTable]; if (!res) { NSLog(@"error when creating db table"); } else { NSLog(@"success to creating db table"); } [db close]; }}//插入資料庫-(void)doClickInsertButton{ if ([db open]) { NSString *insertSql1= [NSString stringWithFormat: @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')", TABLENAME, NAME, AGE, ADDRESS, @"張三", @"13", @"濟南"]; BOOL res = [db executeUpdate:insertSql1]; if (!res) { NSLog(@"error when insert db table"); } else { NSLog(@"success to insert db table"); } NSString *insertSql2 = [NSString stringWithFormat: @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')", TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"濟南"]; BOOL res2 = [db executeUpdate:insertSql2]; if (!res2) { NSLog(@"error when insert db table"); }else{ NSLog(@"success to insert db table"); } [db close]; } }//修改資料庫-(void)doClickUpdateButton{ if ([db open]) { NSString *updateSql = [NSString stringWithFormat: @"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'", TABLENAME, AGE, @"15" ,AGE, @"13"]; BOOL res = [db executeUpdate:updateSql]; if (!res) { NSLog(@"error when update db table"); } else { NSLog(@"success to update db table"); } [db close]; } }//刪除資料庫-(void)doClickDeleteButton{ if ([db open]) { NSString *deleteSql = [NSString stringWithFormat: @"delete from %@ where %@ = '%@'", TABLENAME, NAME, @"張三"]; BOOL res = [db executeUpdate:deleteSql]; if (!res) { NSLog(@"error when delete db table"); } else { NSLog(@"success to delete db table"); } [db close]; } }//查看資料庫-(void)doClickSelectButton{ if ([db open]) { NSString * sql = [NSString stringWithFormat: @"SELECT * FROM %@",TABLENAME]; FMResultSet * rs = [db executeQuery:sql]; while ([rs next]) { int Id = [rs intForColumn:ID]; NSString * name = [rs stringForColumn:NAME]; NSString * age = [rs stringForColumn:AGE]; NSString * address = [rs stringForColumn:ADDRESS]; NSLog(@"id = %d, name = %@, age = %@ address = %@", Id, name, age, address); } [db close]; }}//多線程操作資料庫-(void)doClickMultithreadButton{ FMDatabaseQueue * queue = [FMDatabaseQueue databaseQueueWithPath:database_path]; dispatch_queue_t q1 = dispatch_queue_create("queue1", NULL); dispatch_queue_t q2 = dispatch_queue_create("queue2", NULL); dispatch_async(q1, ^{ for (int i = 0; i < 50; ++i) { [queue inDatabase:^(FMDatabase *db2) { NSString *insertSql1= [NSString stringWithFormat: @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES (?, ?, ?)", TABLENAME, NAME, AGE, ADDRESS]; NSString * name = [NSString stringWithFormat:@"jack %d", i]; NSString * age = [NSString stringWithFormat:@"%d", 10+i]; BOOL res = [db2 executeUpdate:insertSql1, name, age,@"濟南"]; if (!res) { NSLog(@"error to inster data: %@", name); } else { NSLog(@"succ to inster data: %@", name); } }]; } }); dispatch_async(q2, ^{ for (int i = 0; i < 50; ++i) { [queue inDatabase:^(FMDatabase *db2) { NSString *insertSql2= [NSString stringWithFormat: @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES (?, ?, ?)", TABLENAME, NAME, AGE, ADDRESS]; NSString * name = [NSString stringWithFormat:@"lilei %d", i]; NSString * age = [NSString stringWithFormat:@"%d", 10+i]; BOOL res = [db2 executeUpdate:insertSql2, name, age,@"北京"]; if (!res) { NSLog(@"error to inster data: %@", name); } else { NSLog(@"succ to inster data: %@", name); } }]; } }); }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end