iOS-sqlite3&FMDB使用代碼示範,iossqlite3使用

來源:互聯網
上載者:User

iOS-sqlite3&FMDB使用代碼示範,iossqlite3使用

資料庫操作是我們使用十分頻繁的一份操作,在iOS中如何使用資料庫,使用什麼資料庫,是我們不得不考慮的一個問題。

小型資料我們可以使用plist檔案,或者NSUserDefaults儲存。資料量比較多得情況下,我們可以使用sqlite或者Core Data.

在此先介紹一下sqlite的系統API,然後介紹一下第三方庫FMDB,使用第三方庫比使用系統的sqlite簡單方便。

對資料庫的操作,我們可以簡單理解為增刪改查,下面的具體直接使用代碼實現增刪改查,不一具體介紹。

#import <UIKit/UIKit.h>#import <sqlite3.h>#import "Person.h"@interface ViewController : UIViewController{ NSMutableArray *_arrayData;}- (IBAction)addButtonClick:(id)sender;- (IBAction)deleteButtonClick:(id)sender;- (IBAction)updateButtonClick:(id)sender;- (IBAction)selectButtonClick:(id)sender;@end#import "ViewController.h"@interface ViewController ()@endsqlite3 *_database;@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _arrayData = [[NSMutableArray alloc]init]; for(int i = 0;i < 5;i ++) { Person *p = [[Person alloc]init]; p.name = [NSString stringWithFormat:@"wyg%d",i]; p.age = 20 + i; [_arrayData addObject:p]; } [self createTable];}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (IBAction)addButtonClick:(id)sender{ [self insertData];}- (IBAction)deleteButtonClick:(id)sender{ [self deleteData];}- (IBAction)updateButtonClick:(id)sender{ [self updateData];}- (IBAction)selectButtonClick:(id)sender{ [self selectData];}-(void)openDatabase{ if (sqlite3_open([[self getFilePath] UTF8String], &_database) == SQLITE_OK) { NSLog(@"open success"); } else { NSLog(@"open failed"); }}-(void)createTable{ [self openDatabase]; NSString *sql = @"create table if not exists students(name text ,age integer)"; sqlite3_stmt *stmt = nil; if (sqlite3_prepare_v2(_database, [sql UTF8String], -1, &stmt, nil) == SQLITE_OK) { if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"create table success"); } else { NSLog(@"create table failed"); } } sqlite3_finalize(stmt); sqlite3_close(_database);}-(void)insertData{ [self openDatabase]; NSString *sql = @"insert into students(name,age)values(?,?)"; sqlite3_stmt *stmt = nil; for (int i = 0; i < _arrayData.count; i ++) { Person *p = _arrayData[i]; if (sqlite3_prepare_v2(_database, [sql UTF8String], -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_text(stmt, 1, [p.name UTF8String], strlen([p.name UTF8String]), nil); sqlite3_bind_int(stmt, 2, p.age); if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"insert success"); } else { NSLog(@"insert failed"); } } } sqlite3_finalize(stmt); sqlite3_close(_database);}-(void)deleteData{ [self openDatabase]; sqlite3_stmt *stmt = nil; NSString *sql = @"delete from students where age > 23"; if (sqlite3_prepare_v2(_database, [sql UTF8String], -1, &stmt, nil) == SQLITE_OK) { if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"delete success"); } else { NSLog(@"delete failed"); } } sqlite3_finalize(stmt); sqlite3_close(_database);}-(void)updateData{ [self openDatabase]; sqlite3_stmt *stmt = nil; NSString *sql = @"update students set name = 'www' where age > 22"; if (sqlite3_prepare_v2(_database, [sql UTF8String], -1, &stmt, nil) == SQLITE_OK) { if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"update success"); } else { NSLog(@"update failed"); } } sqlite3_finalize(stmt); sqlite3_close(_database);}-(void)selectData{ [self openDatabase]; NSString *sql = @"select *from students"; sqlite3_stmt *stmt = nil; NSMutableArray *array = [[NSMutableArray alloc]init]; if (sqlite3_prepare_v2(_database, [sql UTF8String], -1, &stmt, nil) == SQLITE_OK) { while (sqlite3_step(stmt) == SQLITE_ROW) { char *name = (char *)sqlite3_column_text(stmt, 0); int age = sqlite3_column_int(stmt, 1); Person *p = [[Person alloc]init]; p.name = [NSString stringWithUTF8String:name]; p.age = age; [array addObject:p]; } } NSLog(@"---%@",array); sqlite3_finalize(stmt); sqlite3_close(_database);}-(NSString *)getFilePath{ NSString *docuPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *filePath = [docuPath stringByAppendingPathComponent:@"database.db"]; return filePath;}@endsqlite

關於FMDB,是對系統sqlite的封裝,使用起來更加方便,我們可以從github上下載。

下面代碼是對FMDB的基本封裝。

其中包括對資料庫開啟關閉的操作,和資料庫的基本操作。

對資料庫建立,開啟,關閉等操作我們封裝在DatabaseTool類裡面。

對資料庫的基本操作,例如建立表,增刪改查等操作,我們封裝在ContactDAO類裡面。

操作的資料我們封裝在Contact裡面。

*********************************************************** DatabaseTool**#import <Foundation/Foundation.h>#import "FMDB.h"@interface DatabaseTool : NSObject+(FMDatabase *)shareDatabase;+(BOOL)close;@end#import "DatabaseTool.h"static FMDatabase *_db = nil;@implementation DatabaseTool+(FMDatabase *)shareDatabase{ if (_db == nil) { _db = [[FMDatabase alloc]initWithPath:[self getFilePath]]; } [self open]; return _db;}+(NSString *)getFilePath{ NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *path = [documentPath stringByAppendingPathComponent:@"file.db"]; return path;}+(BOOL)open{ if ([_db open] == NO) { [_db close]; NSAssert(NO, @"資料庫開啟失敗"); } //設定資料庫緩衝機制 [_db setShouldCacheStatements:YES]; return YES;}+(BOOL)close{ if ([_db close] == NO) { NSAssert(NO, @"資料庫關閉失敗"); } return YES;}@end*************************************************************** Contact**#import <Foundation/Foundation.h>//modal 模型@interface Contact : NSObject{ int _cid; NSString *_name; NSString *_phone;}@property(nonatomic,assign) int cid;@property(nonatomic,copy) NSString *name;@property(nonatomic,copy) NSString *phone;//自訂初始化方法-(id)initWithID:(int)ID name:(NSString *)aName phone:(NSString *)aPhone;@end#import "Contact.h"@implementation Contact@synthesize cid = _cid;@synthesize name = _name;@synthesize phone = _phone;-(id)initWithID:(int)ID name:(NSString *)aName phone:(NSString *)aPhone{ if (self = [super init]) { self.cid = ID; self.name = aName; self.phone = aPhone; } return self;}-(void)dealloc{ [_name release]; [_phone release]; [super dealloc];}@end*************************************************************** ContactDAO**#import <Foundation/Foundation.h>#import "DatabaseTool.h"//串連 資料模型和資料庫物件 主要完成表的建立,增刪改查得功能@interface ContactDAO : NSObject+(void)createContactTable;+(void)insertData;+(NSMutableArray *)queryData;+(void)updateDataWithID:(int)cid;+(void)deleteDataWithID:(int)cid;@end#import "ContactDAO.h"#import "Contact.h"@implementation ContactDAO+(void)createContactTable{ FMDatabase *database = [DatabaseTool shareDatabase]; if ([database tableExists:@"contact"] == NO) { [database executeUpdate:@"create table contact(id integer primary key autoincrement not null,name text,phone text)"]; } [DatabaseTool close];}+(void)insertData{ FMDatabase *database = [DatabaseTool shareDatabase]; [database executeUpdate:@"insert into contact(name,phone)values(?,?)",@"wyg",@"1992"]; [DatabaseTool close];}+(NSMutableArray *)queryData{ NSMutableArray *array = [[NSMutableArray alloc]init]; FMDatabase *database = [DatabaseTool shareDatabase]; FMResultSet *set = [database executeQuery:@"select *from contact"]; while ([set next]) { int cid = [set intForColumn:@"id"]; NSString *name = [set stringForColumn:@"name"]; NSString *phone = [set stringForColumn:@"phone"]; Contact *c = [[Contact alloc]initWithID:cid name:name phone:phone]; [array addObject:c]; [c release]; } [set close]; [DatabaseTool close]; return array;}+(void)updateDataWithID:(int)cid{ NSNumber *num = [NSNumber numberWithInt:cid]; FMDatabase *database = [DatabaseTool shareDatabase]; [database executeUpdate:@"update contact set name = 'www' where id = ?",num]; [DatabaseTool close];}+(void)deleteDataWithID:(int)cid{ NSNumber *num = [NSNumber numberWithInt:cid]; FMDatabase *database = [DatabaseTool shareDatabase]; [database executeUpdate:@"delete from contact where id = ?",num]; [DatabaseTool close];}@endFMDB

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.