• ios数据存储方式FMDB


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

     

    分类: ios

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

      

      实现如下:

      

    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:%@ ",name,age,sex];  
    97.         NSLog(@"Name:%@,Age:%d,Sex:%@ ",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:%@ ",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  
  • 相关阅读:
    Java appendReplacement 和 appendTail 方法
    UVA Mapping the Swaps
    oppo X907刷机包 COLOROS 1.0 正式版公布 安卓4.2.2
    MVC传递Model之TempData、ViewData、ViewBag差别及用途
    新加坡电视剧--幸福料理Spice Up每集剧情 Episodic Synopsis_wkh73_新浪博客
    七分食三分练,“七分食”希望解决的是健身人群的独特用餐需求
    基于Redis的BloomFilter算法去重
    砍高层“手脚”、中层“屁股”、基层“脑袋”……任正非管人用人之道竟是如此简单!
    (2)注码法的价值
    全球购 颂拓SUUNTO手表AMBIT3拓野3户外运动石英男表巅峰系列 巅峰蓝宝石心率 SS020673000【图片 价格 品牌 报价】-京东
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/4228317.html
Copyright © 2020-2023  润新知