使用FMDB进行数据库操作

FMDB: https://github.com/ccgus/fmdb


FMDB有三个主要的类
1.FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLite的命令。
2.FMResultSet – 表示FMDatabase执行查询后结果集
3.FMDatabaseQueue – 如果你想在多线程中执行多个查询或更新,你应该使用该类。这是线程安全的。


数据库创建
1.当数据库文件不存在时,fmdb会自己创建一个。
2. 如果你传入的参数是空串:@"" ,则fmdb会在临时文件目录下创建这个数据库,数据库断开连接时,数据库文件被删除。
3.如果你传入的参数是 NULL,则它会建立一个在内存中的数据库,数据库断开连接时,数据库文件被删除。


  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.       
  4.     //数据的路径,放在沙盒的cache下面  
  5.     NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];  
  6.     NSString *filePath = [cacheDir stringByAppendingPathComponent:@"contact.sqlite"];  
  7.       
  8.     //创建并且打开一个数据库  
  9.     _db = [FMDatabase databaseWithPath:filePath];  
  10.       
  11.     BOOL flag = [_db open];  
  12.     if (flag) {  
  13.         NSLog(@"数据库打开成功");  
  14.     }else{  
  15.         NSLog(@"数据库打开失败");  
  16.     }  
  17.       
  18.     //创建表  
  19.    BOOL create =  [_db executeUpdate:@"create table if not exists t_health(id integer primary key  autoincrement, name text,phone text)"];  
  20.       
  21.     if (create) {  
  22.         NSLog(@"创建表成功");  
  23.     }else{  
  24.         NSLog(@"创建表失败");  
  25.     }  
  26.       
  27. }  
  28.   

打开数据库:


[db open]

关闭数据库:


[db close] 


执行更新:

一切不是SELECT命令的命令都视为更新。这包括  CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN,
VACUUM, and REPLACE  (等)。
简单来说,只要不是以SELECT开头的命令都是UPDATE命令。
 
执行更新返回一个BOOL值。YES表示执行成功,否则表示有那些错误 。你可以调用 -lastErrorMessage 和 -lastErrorCode方法来得到更多信息。

  1. - (IBAction)insert:(UIButton *)sender {  
  2.       
  3.     BOOL insert = [_db executeUpdate:@"insert into t_health (name,phone) values(?,?)",@"jacob",@"138000000000"];  
  4.     if (insert) {  
  5.         NSLog(@"插入数据成功");  
  6.     }else{  
  7.         NSLog(@"插入数据失败");  
  8.     }  

  1. - (IBAction)delete:(UIButton *)sender {  
  2.     BOOL delete = [_db executeUpdate:@"delete from t_health where name like ?",@"jacob"];  
  3.     if (delete) {  
  4.         NSLog(@"删除数据成功");  
  5.     }else{  
  6.         NSLog(@"删除数据失败");  
  7.     }  
  8. }  
  9.   


  1. - (IBAction)update:(UIButton *)sender {  
  2.     BOOL update = [_db executeUpdate:@"update t_health set name = ?  where phone = '%@'",@"jacob111"];  
  3.     if (update) {  
  4.         NSLog(@"更新数据成功");  
  5.     }else{  
  6.         NSLog(@"更新数据失败");  
  7.     }  
  8.       
  9. }  
  10.   


执行查询:

SELECT命令就是查询,执行查询的方法是以 -excuteQuery开头的。
执行查询时,如果成功返回FMResultSet对象, 错误返回nil. 与执行更新相当,支持使用 NSError**参数。同时,你也可以使用 -lastErrorCode和-lastErrorMessage获知错误信息。
为了遍历查询结果,你可以使用while循环。你还需要知道怎么跳到下一个记录。使用FMDB,很简单实现,就像这样

  1. - (IBAction)select:(UIButton *)sender {  
  2.    FMResultSet *set = [_db executeQuery:@"select * from t_health "];  //* 代表查询整个表格的说有数据
  3. //  @"select * from t_health WHERE name=@"jacob";" WHERE 后跟随查询条件
  4. // SELECT name FROM t_health;  此时查询到的数据只用name这一列的数据 电话不会出现在查询后的列表中
  5. //
  6.     while ([set next]) {  
  7.         NSString *name =  [set stringForColumn:@"name"];  
  8.         NSString *phone = [set stringForColumn:@"phone"];  
  9.         NSLog(@"name : %@ phone: %@",name,phone);  
  10.     }  
  11.      

 
FMResultSet  提供了很多方法来获得所需的格式的值:
     intForColumn:
    longForColumn:
    longLongIntForColumn:
    boolForColumn:
    doubleForColumn:
    stringForColumn:
    dataForColumn:
    dataNoCopyForColumn:
    UTF8StringForColumnIndex:
    objectForColumn:
 
这些方法也都包括 {type}ForColumnIndex 的这样子的方法,参数是查询结果集的列的索引位置。
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值