FMDatabase用法

转载 http://blog.sina.com.cn/s/blog_94d94f1a01015gcr.html

以下是FMDB的一些基本使用,FMDB框架其实只是一层很薄的封装,主要的类也就两个:FMDatabase和FMResultSet;

其中的FMResultSet对象让我想起了android中sqlite的cursor集合啊。

FMDB的github地址是,https://github.com/ccgus/fmdb。

补充:是导入FMDB之后,还要记得导入iOS的sqlite3Framework,libsqlite3.0.dylib,PS:我发现网上有些转载我的博文的,我很欢迎,毕竟我的一些博文也是总结别人的经验的。但是有个网站,51CTO,我觉得是让人又爱又恨的,它引用的文章从来没有过注明出处。都是佚名。这让人很无语,这是我偶然之间发现我写的东西竟然被标为佚名?

1、首先得实例化一个FMDatabase对象,这跟Sqlitepersistentobjects 派生一个子类进行操作是不同。接着打开一个数据库(如果没有会创建一个数据库)

//paths: ios下Document路径,Document为中ios可读写的文件夹

//创建数据库实例 db 这里说明下:如果路径中不存在”Test.db”的文件,sqlite会自动创建”Test.db”


  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  2. NSString *documentDirectory = [paths objectAtIndex:0];
  3. //dbPath: 数据库路径,在Document中。
  4. NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Test.db"];
  5. FMDatabase *db= [FMDatabase databaseWithPath:dbPath] ;
  6. if (![db open]) {
  7. NSLog(@“Could not open db.”);
  8. return ;
  9. }

接下来,我们可以通过这个数据库对象进行操作了。操作主要是update和queries。

首先是创建表。

//创建一个名为User的表,有两个字段分别为string类型的Name,integer类型的 Age


  1. [db executeUpdate:@"CREATE TABLE User (Name text, Age integer)"];

这样我们就有了一张表了。接下我们对表进行操作。插入数据!注意插入的数据使用了通配符,这跟iphone直接使用sqlite借口的绑定变量是一样的,后面的通配符匹配的数据。

//插入数据使用OC中的类型 text对应为NSString integer对应为NSNumber的整形


  1. [db executeUpdate:@"INSERT INTO User (Name,Age) VALUES (?,?)",@"老婆",[NSNumber numberWithInt:20]] ;

接下来是更新数据。


  1. //更新数据 将“老婆”更改为“宝贝”
  2. [db executeUpdate:@"UPDATE User SET Name = ? WHERE Name = ? ",@"老婆",@"宝贝"];

再接下来,就是删除数据啦。


  1. //删除数据
  2. [db executeUpdate:@"DELETE FROM User WHERE Name = ?",@"老婆"];

update的基本操作就这几个,接下来是queries!


  1. //返回数据库中第一条满足条件的结果
  2. NSString *aa=[db stringForQuery:@"SELECT Name FROM User WHERE Age = ?",@"20"];

这样我们就查询返回了一条数据,那当我们想要查询放返回多条数据怎么办呢?不用愁,之前我就提到了FMDB中的另外一个主要的类,FMResultSet,这是一个结果集!返回多条数据时FMDB会将数据放在这个结果集中,然后我们在对这个结果集进行查询操作!很简单。


  1. FMResultSet *rs=[db executeQuery:@"SELECT * FROM User"];
  2. rs=[db executeQuery:@"SELECT * FROM User WHERE Age = ?",@"20"];
  3. while ([rs next]){
  4. NSLog(@“%@ %@”,[rs stringForColumn:@"Name"],[rs stringForColumn:@"Age"]);
  5. }

更多的FMResultSet方法有:

intForColumn:

longForColumn:

longLongIntForColumn:

boolForColumn:

doubleForColumn:

stringForColumn:

dateForColumn:

dataForColumn:

dataNoCopyForColumn:

UTF8StringForColumnIndex:

objectForColumn:

 
 
 
 
 

- (NSString*) getPath {

NSArray* paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) ;

return [[pathsobjectAtIndex:0]stringByAppendingPathComponent:@"MyTable"] ;

}

1.创建数据库

-(void)CreateTable;

{

dataBase = [FMDatabasedatabaseWithPath:[selfgetPath]];

if (![dataBase open])

NSLog(@"OPEN FAIL");

}

[dataBaseexecuteUpdate:@"CREATE TABLE IF NOT EXISTS MyTable(aa float,bb text,cc integer,dd integer,ee text)"];

[dataBaseclose];

}

2.查询数据

-(void)QueryData

{

//获取数据

recordArray = [[NSMutableArrayalloc]init];

db = [[FMDatabasealloc]initWithPath:[selfgetPath]];

if ([db open]) {

FMResultSet *rs = [dbexecuteQuery:@"SELECT * FROM MyTable"];

while ([rs next]){

OneRecord = [[OneRecord alloc]init];

OneRecord.aa = [NSNumbernumberWithFloat:[rs doubleForColumn:@"aa"]];

OneRecord.bb = [rs stringForColumn:@"bb"];

OneRecord.cc = [NSNumbernumberWithInt:[rs intForColumn:@"cc"]];

OneRecord.dd = [NSNumbernumberWithInt:[rs intForColumn:@"dd"]];

OneRecord.ee = [rs stringForColumn:@"ee"];

[recordArrayaddObject: OneRecord];

[OneRecordrelease];

}

[rs close];

[dbclose];

}

3.更新数据

-(void)UpdateData

{

if ([dbopen]) {

[dbbeginTransaction];

[dbexecuteUpdate:@"UPDATE MyTable SET aa = ? WHERE date = ?",aa1,aa2];

[dbexecuteUpdate:@"UPDATE MyTable SET bb = ? WHERE date = ?",bb1,bb2];

[dbexecuteUpdate:@"UPDATE MyTable SET cc = ? WHERE date = ?",cc1,cc2];

[dbexecuteUpdate:@"UPDATE MyTable SET dd = ? WHERE date = ?",dd1,dd2];

[dbcommit];

db close];

}

}

4。插入数据

-(void)insertData

{

//插入数据库

[dbbeginTransaction];

[dbexecuteUpdate:@"INSERT INTO MyTable (aa,bb,cc,dd,ee) VALUES (?,?,?,?,?)",

NSNumber numberWithFloat:aa],bb,cc,dd,ee];

db commit];

db close];

}

SQLite-FMDatabase用法的更多相关文章

  1. flex sqlite基本用法

    flex sqlite基本用法 页面 <?xml version="1.0" encoding="utf-8"?> <s:WindowedAp ...

  2. Android 操作SQLite基本用法

    一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 ...

  3. sqlite query用法

    本文转自http://blog.csdn.net/double2hao/article/details/50281273,在此感谢作者 query(table, columns, selection, ...

  4. 数据持久化之sqlite基本用法

    一.ACID 即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性:整个事务中的所有操作,要么全部完成,要么全部不完 ...

  5. sqlite基本用法

    DDL-数据定义语言 CREATE 创建一个新的表,一个表的视图,或者数据库中的其他对象. ALTER 修改数据库中的某个已有的数据库对象,比如一个表. DROP 删除整个表,或者表的视图,或者数据库 ...

  6. Android SQLite基本用法

    SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...

  7. 【Android】SQLite基本用法(转)

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...

  8. ios 中sqlite的用法

    #import <sqlite3.h> @interface ViewController () { sqlite3 *_sqldb; } @end @implementation Vie ...

  9. 学习SQLite之路(五) C/C++ SQLite开发实例

    介绍一种乌班图中使用sqlite的用法,非常简单,下面的例子是在乌班图12.04中实现的: 1,先安装两个东西: sudo apt-get install sqlite sqlite3 sudo ap ...

随机推荐

  1. 17.VUE学习之- v-for指令的使用方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Python周末21天笔记

    模块一: 基础相互据类型之间的相互转换 1. 字符串str 与 列表 list 与字典 dict 以及 元祖tuple的转换 例一: 把字典的key和value的值取出来,按照顺序存入到list中 d ...

  3. 下载速度更加快的 SourceForge 镜像

    http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/是 University of Kent的镜像, ...

  4. 分数调查 HihoCoder - 1515

    小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得到一些小道消息,例如X号同学的分数比Y号同学的分数高S分. 小Hi想知道利用这 ...

  5. 【树状数组】CF961E Tufurama

    挺巧妙的数据结构题(不过据说这是一种套路? E. Tufurama One day Polycarp decided to rewatch his absolute favourite episode ...

  6. Spring.Net初认识——竹子整理

    留个脚印,过两天总结. 看到知乎上有人对于DI|IOC 的解释,满不错,收藏下先 作者:OneNoodle链接:http://www.zhihu.com/question/23277575/answe ...

  7. IT帮2019年2月线下活动【定义工作,解读自我】之站桩练习

    2019年2月IT帮线下活动[定义工作,解读自我] 昨天的活动收获很大,全面的总结周老师会另写一篇来帮助大家回顾.我想说一下其中最打动我的一句话:“只有你能决定你有多优秀!” “工作中把自己当成企业家 ...

  8. laravel5.2总结--blade模板

    ## 1.基本用法 ``` ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div ...

  9. IOS笔记050-事件处理

    IOS事件处理 1.触摸事件 2.加速器事件:重力感应,旋转等事件 3.远程遥控事件:蓝牙线控,耳机线控等 触摸事件 响应者对象 只有继承了UIResponder得对象才能接收并处理事件 常见类有:U ...

  10. lcd1602如何自定义汉字(verilog)

    今天一鼓作气,再研究了一下如何用LCD1602自定义汉字 1.用字模软件获取汉字所对应的数据(因为嫌麻烦所以直接用了网上一个帖子里有关“电”的数据,如下:04,1f,15,1f,15,15,1f,04 ...