首页 > 代码库 > ios数据存储方式FMDB

ios数据存储方式FMDB

本文转载至 http://blog.csdn.net/chen505358119/article/details/9289489 

 

分类: ios

       从网上下载FMDB的原码,将其拖入到项目中,然后在Link Binary With Libraries中添加libsqlite3.dylib,就可以用了

  技术分享

  实现如下:

  

[plain] view plaincopyprint?
  1. #import "ViewController.h"  
  2. #import "FMDatabase.h"  
  3. #import "FMDatabaseAdditions.h"  
  4. #import "FMDatabaseQueue.h"  
  5. @interface ViewController ()  
  6.   
  7. @end  
  8.   
  9. @implementation ViewController  
  10.   
  11. - (void)viewDidLoad  
  12. {  
  13.     [super viewDidLoad];  
  14.     // Do any additional setup after loading the view, typically from a nib.  
  15. }  
  16.   
  17. - (void)didReceiveMemoryWarning  
  18. {  
  19.     [super didReceiveMemoryWarning];  
  20.     // Dispose of any resources that can be recreated.  
  21. }  
  22.   
  23. - (void)dealloc {  
  24.     [_nameText release];  
  25.     [_ageText release];  
  26.     [_sexText release];  
  27.     [_showLabel release];  
  28.     [super dealloc];  
  29. }  
  30. - (void)viewDidUnload {  
  31.     [self setNameText:nil];  
  32.     [self setAgeText:nil];  
  33.     [self setSexText:nil];  
  34.     [self setShowLabel:nil];  
  35.     [super viewDidUnload];  
  36. }  
  37. //保存  
  38. - (IBAction)saveBtn:(id)sender {  
  39.     FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];  
  40.     if (![database open]) {  
  41.         NSLog(@"Open database failed");  
  42.         return;  
  43.     }  
  44.     if (![database tableExists:@"user"]) {  
  45.         [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];  
  46.     }  
  47.     BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];  
  48.     //下面注释的也能实现数据的插入,只不过它是传入了字典  
  49. //    NSMutableDictionary* argsDict=[NSMutableDictionary dictionary];  
  50. //    [argsDict setObject:_nameText.text forKey:@"name"];  
  51. //    [argsDict setObject:_ageText.text forKey:@"age"];  
  52. //    [argsDict setObject:_sexText.text forKey:@"sex"];  
  53. //    BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (:name,:age,:sex)" withParameterDictionary:argsDict];  
  54.     if (insert) {  
  55.         UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];  
  56.         [alert show];  
  57.         [alert release];  
  58.     }else{  
  59.         NSLog(@"insert failed");  
  60.     }  
  61.     [database close];  
  62.     //下面注释的这一段也是创建表只不过它是多线程安全的,而上面的在多线程中是不安全的  
  63. //    FMDatabaseQueue* queue=[FMDatabaseQueue databaseQueueWithPath:[self databasePath]];  
  64. //    [queue inDatabase:^(FMDatabase* database){  
  65. //        if (![database tableExists:@"user"]) {  
  66. //            [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];  
  67. //        }  
  68. //        BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];  
  69. //        if (insert) {  
  70. //            UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];  
  71. //            [alert show];  
  72. //            [alert release];  
  73. //        }else{  
  74. //            NSLog(@"insert failed");  
  75. //        }  
  76. //  
  77. //    }];  
  78. //    [queue close];  
  79.       
  80.       
  81.       
  82. }  
  83. //显示所有数据库中的数据  
  84. - (IBAction)showBtn:(id)sender {  
  85.     FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];  
  86.     if (![database open]) {  
  87.         return;  
  88.     }  
  89.     //注意 此处的FMResultSet可以不用关闭,因为数据库关闭的时候FMResultSet自动关闭  
  90.     FMResultSet* resultSet=[database executeQuery:@"select* from user"];  
  91.     NSString* str=@"";  
  92.     while ([resultSet next]) {  
  93.         NSString* name=[resultSet stringForColumn:@"name"];  
  94.         NSInteger age=[resultSet intForColumn:@"age"];  
  95.         NSString* sex=[resultSet stringForColumn:@"sex"];  
  96.         str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];  
  97.         NSLog(@"Name:%@,Age:%d,Sex:%@\n",name,age,sex);  
  98.     }  
  99.     _showLabel.text=str;  
  100.     [database close];  
  101. }  
  102. //查询  
  103. - (IBAction)checkBtn:(id)sender {  
  104.     FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];  
  105.     if (![database open]) {  
  106.         return;  
  107.     }  
  108.     FMResultSet* resultSet=[database executeQuery:@"select* from user where name = ?",@"chen"];  
  109.     NSString* str=@"";  
  110.     while ([resultSet next]) {  
  111.         NSString* name=[resultSet stringForColumn:@"name"];  
  112.         NSInteger age=[resultSet intForColumn:@"age"];  
  113.         NSString* sex=[resultSet stringForColumn:@"sex"];  
  114.         str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];  
  115.     }  
  116.     _showLabel.text=str;  
  117.     [database close];  
  118. }  
  119. //删除  
  120. - (IBAction)deleteBtn:(id)sender {  
  121.     FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];  
  122.     if (![database open]) {  
  123.         return;  
  124.     }  
  125.     BOOL delete=[database executeUpdate:@"delete from user where name = ?",@"chen"];  
  126.     if (delete) {  
  127.         UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"删除成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];  
  128.         [alert show];  
  129.         [alert release];  
  130.     }  
  131.     [database close];  
  132. }  
  133. //更新  
  134. - (IBAction)updateBtn:(id)sender {  
  135.     FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];  
  136.     if (![database open]) {  
  137.         return;  
  138.     }  
  139.     BOOL update=[database executeUpdate:@"update user set age = ? where name= ?",[NSNumber numberWithInt:20],@"chen"];  
  140.     if (update) {  
  141.         UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"更新成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];  
  142.         [alert show];  
  143.         [alert release];  
  144.     }  
  145.     [database close];  
  146. }  
  147.   
  148. -(NSString* )databasePath  
  149. {  
  150.     NSString* path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  151.     NSString* dbPath=[path stringByAppendingPathComponent:@"user.db"];  
  152.     return dbPath;  
  153.       
  154. }  
  155. @end  

ios数据存储方式FMDB