当前位置: 首页 > news >正文

性咨询站长seo综合查询

性咨询,站长seo综合查询,主流建站公司,wordpress 轮播图插件前言 http://blog.devtang.com/blog/2012/04/22/use-fmdb/ SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库。iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。但是&#xff0…

前言

http://blog.devtang.com/blog/2012/04/22/use-fmdb/

 

SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库。iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。但是,原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,开源社区中就出现了一系列将SQLite API进行封装的库,而FMDB (https://github.com/ccgus/fmdb) 则是开源社区中的优秀者。

FMDB在使用上相当方便。以下是一个简单的例子:

1
2
3
4
5
6 7 8 9 10 11 
NSString* docsdir = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString* dbpath = [docsdir stringByAppendingPathComponent:@"user.sqlite"]; FMDatabase* db = [FMDatabase databaseWithPath:dbpath]; [db open]; FMResultSet *rs = [db executeQuery:@"select * from people"]; while ([rs next]) {  NSLog(@"%@ %@",  [rs stringForColumn:@"firstname"],  [rs stringForColumn:@"lastname"]); } [db close]; 

可以看到,使用FMDB后的数据库代码清晰明了,比原生的API优雅多了。另外,FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。

使用说明

该使用说明主要翻译自fmdb的github项目说明文档: https://github.com/ccgus/fmdb

引入相关文件

首先将FMDB从github上clone下来,然后将以下文件copy到你的工程中:

1
2
3
4
5
6 7 8 9 10 
FMDatabase.h
FMDatabase.m FMDatabaseAdditions.h FMDatabaseAdditions.m FMDatabasePool.h FMDatabasePool.m FMDatabaseQueue.h FMDatabaseQueue.m FMResultSet.h FMResultSet.m 

建立数据库

建立数据库只需要如下一行即可,当该文件不存在时,fmdb会自己创建一个。如果你传入的参数是空串:@”” ,则fmdb会在临时文件目录下创建这个数据库,如果你传入的参数是 NULL,则它会建立一个在内存中的数据库。

1
FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; 

打开数据库

使用如下语句,如果打开失败,可能是权限不足或者资源不足。通常打开完操作操作后,需要调用close方法来关闭数据库。

1
2
3
4
5
6 7 8 
if (![db open]) {  // error  return; } // some operation // ...  [db close]; 

执行更新操作

除了Select操作之外,其它的都是更新操作。更新操作使用如下方法,如果有错误,可以用error参数中获得。

1
-[FMDatabase executeUpdate:error:withArgumentsInArray:orVAList:] 

执行查询操作

查询操作示例如下。注意:即使操作结果只有一行,也需要先调用FMResultSet的next方法。

1
2
3
4
5
6 7 8 9 
FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"]; while ([s next]) {  //retrieve values for each record }  FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"]; if ([s next]) {  int totalCount = [s intForColumnIndex:0]; } 

FMDB提供如下多个方法来获取不同类型的数据:

1
2
3
4
5
6 7 8 9 10 11 
intForColumn:
longForColumn:
longLongIntForColumn: boolForColumn: doubleForColumn: stringForColumn: dateForColumn: dataForColumn: dataNoCopyForColumn: UTF8StringForColumnIndex: objectForColumn: 

通常情况下,你并不需要关闭FMResultSet,因为相关的数据库关闭时,FMResultSet也会被自动关闭。

数据参数

通常情况下,你可以按照标准的SQL语句,用?表示执行语句的参数,如:

1
INSERT INTO myTable VALUES (?, ?, ?) 

然后,可以我们可以调用executeUpdate方法来将?所指代的具体参数传入,通常是用变长参数来传递进去的,如下:

1
2
NSString *sql = @"insert into User (name, password) values (?, ?)"; [db executeUpdate:sql, user.name, user.password]; 

这里需要注意的是,参数必须是NSObject的子类,所以象int,double,bool这种基本类型,需要封装成对应的包装类才行,如下所示:

1
2
3
4
// 错误,42不能作为参数
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", 42]; // 正确,将42封装成 NSNumber 类 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:42]]; 

线程安全

如果我们的app需要多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。切记不能在多个线程中共同一个FMDatabase对象并且在多个线程中同时使用,这个类本身不是线程安全的,这样使用会造成数据混乱等问题。

使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。在闭包中操作数据库,而不直接参与FMDatabase的管理。

1
2
3
4
5
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
// 创建,最好放在一个单例的类中
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];  // 使用 [queue inDatabase:^(FMDatabase *db) {  [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];  [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];  [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];   FMResultSet *rs = [db executeQuery:@"select * from foo"];  while ([rs next]) {  // …  } }];  // 如果要支持事务 [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {  [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];  [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];  [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];   if (whoopsSomethingWrongHappened) {  *rollback = YES;  return;  }  // etc…  [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]]; }]; 

工具

为了查看Sqlite中的数据,一个好的图形化界面的数据库管理程序是必不可少的。mysql有phpMyAdmin,那么sqlite呢?

我主要使用的是Firefox的一个名为SQLite Manager的插件,安装此插件后,可以直接打开后缀名为sqlite的数据库文件。SQLite Manager提供一个图形化的界面来执行数据查询或更改操作。如下图所示:

总结

FMDB将SQLite API进行了很友好的封装,使用上非常方便,对于那些使用纯Sqlite API来进行数据库操作的app,可以考虑将其迁移到基于FMDB上,这对于以后数据库相关功能的开发维护,可以提高不少效率。

我在学习fmdb的时候做了一个小工程用于练习,我把它放到github上了。感兴趣的可以自行下载:https://github.com/tangqiaoboy/FmdbSample

祝大家玩得开心。

原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

转载于:https://www.cnblogs.com/q403154749/p/3926491.html

http://www.lbrq.cn/news/2347273.html

相关文章:

  • 手机wap网站源码深圳seo推广外包
  • 如何做网站流量报告广告软文范例
  • 58临沂网站建设seo搜索引擎优化知乎
  • 湖北武汉医院网站建设关键词优化快速
  • 网站开发采用的技术方案说明好看的网页设计作品
  • 华为官方网站专卖店企业管理培训课程报名
  • 北京建设网站公司网站seo搜索引擎优化实训报告
  • 漯河建设企业网站关键词采集网站
  • 网站建站平台广告优化师
  • 微信小店可以做分类网站知名的建站公司
  • 南通网站建设计划书企点官网
  • 贵阳网站建设黔搜抖音营销推广怎么做
  • 食品包装设计公司绍兴seo
  • 知名企业名称有哪些百度seo关键词排名
  • 一起做网站17广州广告联盟点击赚钱平台
  • 微信发布wordpress长沙seo代理商
  • wordpress 127.0.0.1seo关键词排行优化教程
  • 徐州网站制作费用seo排名首页
  • 大兴网站开发网站建设网络营销的策略有哪些
  • 网站改版设计方案网推怎么推广
  • 微信网站模板四川成都最新消息
  • 刚学做网站怎么划算深圳优化公司统高粱seo
  • 黄江镇仿做网站站长平台百度
  • 公众平台网站价格重庆关键词seo排名
  • 空间怎么做网站最近爆发什么病毒感染
  • 不允许做企业网站今日重大新闻事件
  • 网站建设对接流程图市场营销计划书模板
  • html5 网站搭建宁波网站建设推广平台
  • 有经验的合肥网站建设seo关键技术有哪些
  • 东莞网络建站适合seo优化的网站
  • CentOS网络配置与LAMP环境搭建指南
  • 网络安全初级(Python实现sql自动化布尔盲注)
  • 网络安全初级(XSS-labs 1-8)
  • Kotlin比较接口
  • Java线程池深度解析与Spring Boot实战指南
  • Linux探秘坊-------14.信号