SQLite-FMDatabase用法
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”
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentDirectory = [paths objectAtIndex:0];
- //dbPath: 数据库路径,在Document中。
- NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Test.db"];
- FMDatabase *db= [FMDatabase databaseWithPath:dbPath] ;
- if (![db open]) {
- NSLog(@“Could not open db.”);
- return ;
- }
接下来,我们可以通过这个数据库对象进行操作了。操作主要是update和queries。
首先是创建表。
//创建一个名为User的表,有两个字段分别为string类型的Name,integer类型的 Age
- [db executeUpdate:@"CREATE TABLE User (Name text, Age integer)"];
这样我们就有了一张表了。接下我们对表进行操作。插入数据!注意插入的数据使用了通配符,这跟iphone直接使用sqlite借口的绑定变量是一样的,后面的通配符匹配的数据。
//插入数据使用OC中的类型 text对应为NSString integer对应为NSNumber的整形
- [db executeUpdate:@"INSERT INTO User (Name,Age) VALUES (?,?)",@"老婆",[NSNumber numberWithInt:20]] ;
接下来是更新数据。
- //更新数据 将“老婆”更改为“宝贝”
- [db executeUpdate:@"UPDATE User SET Name = ? WHERE Name = ? ",@"老婆",@"宝贝"];
再接下来,就是删除数据啦。
- //删除数据
- [db executeUpdate:@"DELETE FROM User WHERE Name = ?",@"老婆"];
update的基本操作就这几个,接下来是queries!
- //返回数据库中第一条满足条件的结果
- NSString *aa=[db stringForQuery:@"SELECT Name FROM User WHERE Age = ?",@"20"];
这样我们就查询返回了一条数据,那当我们想要查询放返回多条数据怎么办呢?不用愁,之前我就提到了FMDB中的另外一个主要的类,FMResultSet,这是一个结果集!返回多条数据时FMDB会将数据放在这个结果集中,然后我们在对这个结果集进行查询操作!很简单。
- FMResultSet *rs=[db executeQuery:@"SELECT * FROM User"];
- rs=[db executeQuery:@"SELECT * FROM User WHERE Age = ?",@"20"];
- while ([rs next]){
- NSLog(@“%@ %@”,[rs stringForColumn:@"Name"],[rs stringForColumn:@"Age"]);
- }
更多的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];
}
5
SQLite-FMDatabase用法的更多相关文章
- flex sqlite基本用法
flex sqlite基本用法 页面 <?xml version="1.0" encoding="utf-8"?> <s:WindowedAp ...
- Android 操作SQLite基本用法
一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 ...
- sqlite query用法
本文转自http://blog.csdn.net/double2hao/article/details/50281273,在此感谢作者 query(table, columns, selection, ...
- 数据持久化之sqlite基本用法
一.ACID 即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性:整个事务中的所有操作,要么全部完成,要么全部不完 ...
- sqlite基本用法
DDL-数据定义语言 CREATE 创建一个新的表,一个表的视图,或者数据库中的其他对象. ALTER 修改数据库中的某个已有的数据库对象,比如一个表. DROP 删除整个表,或者表的视图,或者数据库 ...
- Android SQLite基本用法
SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...
- 【Android】SQLite基本用法(转)
在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...
- ios 中sqlite的用法
#import <sqlite3.h> @interface ViewController () { sqlite3 *_sqldb; } @end @implementation Vie ...
- 学习SQLite之路(五) C/C++ SQLite开发实例
介绍一种乌班图中使用sqlite的用法,非常简单,下面的例子是在乌班图12.04中实现的: 1,先安装两个东西: sudo apt-get install sqlite sqlite3 sudo ap ...
随机推荐
- js控制时间显示格式
Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.g ...
- MySQL - GROUP_CONCAT 使用方法
如上图,我想把结果集中的三行链接成一行,则可这样写: 总结: GROUP_CONCAT函数默认是用','逗号链接,如果你加上第二个参数,则以',第二个参数值'逗号+第二个参数值链接,如下图 ...
- Centos7之WEB服务器
1.安装httpd服务 输入命令:yum -y install httpd [root@N37012 ~]# yum -y install httpc Loaded plugins: fastestm ...
- ATM-db-dnhandler
import os,jsonfrom conf import settings def select(name): user_path = os.path.join(settings.BASE_DB, ...
- vue 组件的书写
简单的来说是 vue组件最核心的就是props和自定义函数,来实现组件的开发 最简单的一个组件 子组件如下: <template> <div class="bgClass& ...
- 为什么选择Redis
1)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储. 2)Redis支持master-slave(主-从)模式应用 3)Redi ...
- 数据分析处理库Pandas——索引
显示DataFrame结构中的指定列 使用iloc索引 指定一行的信息 指定多行信息 备注:第[1,5)行信息. 指定行和列 备注:第[0,5)行中第[1,3)列信息. 使用loc索引 指定行信息 备 ...
- 动态规划:HDU1224-Free DIY Tour
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 内容提供器(Content Provider)
一个跟数据库很相似的用于与其他程序传递信息的组件,用的也是数据库的CRUD操作 相关权限 注册内容提供者以及权限 <provider android:name=".ContentRes ...
- SpringMVC controller接收的中文参数乱码
CharacterEncodingFilter只对POST请求有用,GET请求的需要对你运行的tomcat 目录conf/server.xml文件中<Connector connectionTi ...