简介:

  FMDB是基于SQlite3的封装一个第三方的OC库,操作起来更加简单,性能比Coredata更加高。

1.创建sqlite文件

2.导入FMDB头文件

3.创建数据库表table

4.编写sql语句

5.执行操作语句

1.使用示例:

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
SQLiteManager.shareManager().openDB("hjq.sqlite") return true
}
}

2.创建数据库并建表

import UIKit

class SQLiteManager: NSObject {

/// 单例
private static let manager: SQLiteManager = SQLiteManager()
class func shareManager() -> SQLiteManager {
return manager
} var dbQueue: FMDatabaseQueue? /**
* 打开数据库
*/
func openDB(DBName: String)
{
// 1.根据传入的数据库名称拼接数据库路径
let path = DBName.docDir()
print(path) // 2.创建数据库对象
// 注意: 如果是使用FMDatabaseQueue创建数据库对象, 那么就不用打开数据库
dbQueue = FMDatabaseQueue(path: path) // 4.创建表
creatTable()
}

private func creatTable()
{
// 1.编写SQL语句
let sql = "CREATE TABLE IF NOT EXISTS T_Person( \n" +
"id INTEGER PRIMARY KEY AUTOINCREMENT, \n" +
"name TEXT, \n" +
"age INTEGER \n" +
"); \n" // 2.执行SQL语句
dbQueue!.inDatabase { (db) -> Void in
db.executeUpdate(sql, withArgumentsInArray: nil)
}
}
}

3.插入数据

        // 1.定义SQL语句
let sql = "INSERT OR REPLACE INTO T_Status" +
"(statusId, statusText, userId)" +
"VALUES" +
"(?, ?, ?);" // 2.执行SQL语句(用事务)
SQLiteManager.shareManager().dbQueue?.inTransaction({ (db, rollback) -> Void in for dict in statuses
{
let statusId = dict["id"]!
// JSON -> 二进制 -> 字符串
let data = try! NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.PrettyPrinted)
let statusText = String(data: data, encoding: NSUTF8StringEncoding)!
print(statusText)
if !db.executeUpdate(sql, statusId, statusText, userId)
{
// 如果插入数据失败, 就回滚
rollback.memory = true
} }
})

4.查找数据

        // 1.定义SQL语句
var sql = "SELECT * FROM T_Status \n"
if since_id >
{
sql += "WHERE statusId > \(since_id) \n"
}else if max_id >
{
sql += "WHERE statusId < \(max_id) \n"
} sql += "ORDER BY statusId DESC \n"
sql += "LIMIT 20; \n" // 2.执行SQL语句
SQLiteManager.shareManager().dbQueue?.inDatabase({ (db) -> Void in // 2.1查询数据
// 返回字典数组的原因:通过网络获取返回的也是字典数组,
// 让本地和网络返回的数据类型保持一致, 以便于我们后期处理
var statuses = [[String: AnyObject]]() if let res = db.executeQuery(sql, withArgumentsInArray: nil)
{
// 2.2遍历取出查询到的数据
while res.next()
{
// 1.取出数据库存储的一条微博字符串
let dictStr = res.stringForColumn("statusText") as String
// 2.将微博字符串转换为微博字典
let data = dictStr.dataUsingEncoding(NSUTF8StringEncoding)!
let dict = try! NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! [String: AnyObject]
statuses.append(dict)
} // 3.返回数据
finished(statuses) } // 3.返回数据
finished(statuses) })

5.删除和更新

        // 1.定义SQL语句
let sql = "DELETE FROM T_Status WHERE createDate <= '\(dateStr)';" // 2.执行SQL语句
SQLiteManager.shareManager().dbQueue?.inDatabase({ (db) -> Void in
db.executeUpdate(sql, withArgumentsInArray: nil)
})

附:

String分类获取文件目录

import UIKit

extension String{
/**
将当前字符串拼接到cache目录后面
*/
func cacheDir() -> String{
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString
return path.stringByAppendingPathComponent((self as NSString).lastPathComponent)
}
/**
将当前字符串拼接到doc目录后面
*/
func docDir() -> String
{
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString
return path.stringByAppendingPathComponent((self as NSString).lastPathComponent)
}
/**
将当前字符串拼接到tmp目录后面
*/
func tmpDir() -> String
{
let path = NSTemporaryDirectory() as NSString
return path.stringByAppendingPathComponent((self as NSString).lastPathComponent)
}
}

第三篇、FMDB使用的更多相关文章

  1. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  2. iOS开发数据库篇—FMDB数据库队列

    iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...

  3. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  4. (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...

  5. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 第三篇 Entity Framework Plus 之 Query Cache

    离上一篇博客,快一周,工作太忙,只能利用休息日来写一些跟大家分享,Entity Framework Plus 组件系列文章,之前已经写过两篇 第一篇 Entity Framework Plus 之 A ...

  7. 我的屌丝giser成长记-研三篇

    进入研三以来,基本都是自己的自由时间了,从导师的项目抽离出来,慢慢的都交给师弟他们来负责.研三的核心任务就是找工作以及写毕业论文,因为有导师科研基金项目成果作为支撑,所以自己的论文没什么可担心,一切都 ...

  8. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

  9. 前端工程师技能之photoshop巧用系列第三篇——切图篇

    × 目录 [1]切图信息 [2]切图步骤 [3]实战 前面的话 前端工程师除了使用photoshop进行测量之外,更重要的是要使用该软件进行切图.本文是photoshop巧用系列的第三篇——切图篇 切 ...

  10. 解剖SQLSERVER 第三篇 数据类型的实现(译)

    解剖SQLSERVER 第三篇  数据类型的实现(译) http://improve.dk/implementing-data-types-in-orcamdf/ 实现对SQLSERVER数据类型的解 ...

随机推荐

  1. hdoj 2682 Tree

    Tree Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. 转载 DevOps的基本原则与介绍

    转载原地址:  http://www.cnblogs.com/wintersun/p/3339047.html DevOps的基本原则与介绍 DevOps这个术语是developer与operatio ...

  3. Extjs4---Cannot read property 'addCls' of null

    用MVC做后台管理系统时遇到的问题,关于tab关闭后再打开不显示,或者报错 我在新的tabpanel中加入了一个grid,当我关闭再次打开就会报错Cannot read property 'addCl ...

  4. iOS 开发查看应用的沙盒文件

    在iOS开发中,常常需要将一些信息保存到本地,比如说用户的一些搜索历史等.那么,如何查看所保存的文件呢? 这里介绍两种途径来查看应用的沙盒文件. 方法一:通过Xcode来查看,步骤如下: (1): X ...

  5. JavaScript Source Map 详解

    源码地址: http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html 上周,jQuery 1.9发布. 这是2.0版之前的最后 ...

  6. PHP 文件包含之文件路径截断(转)

    PHP 文件包含之文件路径截断 以下是网络摘要: 1. 本来还以为挖到金矿了,跟黑哥交流后发现只能应用于Win32平台,使这个BUG的威力暴减,基本没有太大危害了,因为在WIN32平台使用PHP的实在 ...

  7. Start-Process传递变量

    如果$b="aa,bb" Start-Process PowerShell.exe -Argumentlist "d:\w.ps1 $a $b $c" Star ...

  8. nginx 调优

    般来说nginx配置文件中对优化比较有作用的为以下几项:worker_processes 8;1 nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity 0 ...

  9. iOS-推送通知

    推送通知可以做3件事:(1)文字信息(2)一种声音 (3)一个徽章的标记号(第几条消息..) 推送通知流程  (app应用程序--->iOS 设备--->APNS(apple服务器)--- ...

  10. [Bootstap] 9. Dropdown

    Dropdown Arrow Class In order to create a down arrow like this: , what class should we apply to the ...