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. 使用Maven开发一个简单的SpringData

    1:创建Maven项目 2:添加依赖(修改pom.xml为以下代码) <project xmlns="http://maven.apache.org/POM/4.0.0" x ...

  2. MyElipes遇到 source not found解决方案

    在用Myeclipse 或者是eclipse进行开发时候经常遇到这个问题. File class editor  source not found问题.原因很简单,就是因为这是一个源码包,相应的没有编 ...

  3. 解决国内网络Python2.X 3.X PIP安装模块连接超时问题

    pip国内的一些镜像   阿里云 http://mirrors.aliyun.com/pypi/simple/   中国科技大学 https://pypi.mirrors.ustc.edu.cn/si ...

  4. 想成长为一名年薪50万+的实战型架构师?必掌握这7大实战技能经验--阿里mike

    想成为一名架构师,但是架构师对应的技能,我应该掌握哪些啊?以及掌握的程度是什么样的?如何成为一名真正的实战性架构师? 我简要分为以下7点来谈谈,从技能的角度抛砖引玉,希望你对你架构师之路有一定的参考. ...

  5. 12、python中的函数(高阶函数)

    一.高阶函数 函数实际上也是一个对象,所以也能由变量指向一个函数对象,实际上函数名就是一个变量名.那么函数是传入变量作为参数的,如果传入的变量指向的是函数对象,这种函数就叫高阶函数. 高阶函数就是传入 ...

  6. Python 交互模式中 Delete/Backspace 键乱码问题

    进入 Python 交互模式,按下 Delete/Backspace 键,会出现 ^H 字符 解决方式: 1. 进到 Python 的Modules目录 [root@cyt-test Python-2 ...

  7. sc.exe

    sc.exe 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 服务管理程序:可用sc.exe远程创建 外文名 sc.exe 停止事件服务 sc  stop eventl ...

  8. IOS开发学习笔记041-UITableView总结1

    一.UITableView的常用属性 1.分割线 // 分割线 self.tableView.separatorColor = [UIColorredColor]; // 隐藏分割线 self.tab ...

  9. 使用 SceneLoader 类在 XNA 中显示载入屏幕(十)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  10. Python+Selenium练习篇之4-利用link text定位元素

    本文介绍如何通过link text 来定位页面元素,我们打开网页,一些可以点击的链接跳转上面的文字,就是link text,用百度首页举例来看: 在上面图中,这一排上面的文字都是link text,例 ...