简介:

  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. 转载 C#中使用结构来传递多个参数

    C#中当参数超过5个时,建议用结构来传递多个参数. 示例代码如下: public struct MyStruct { public string str; public int number; } c ...

  2. 解决IE6不支持fixed

    /* IE6 是不支持position:fixed的,解决如下*/.right-bar{ _position:absolute;_top:expression(eval(document.docume ...

  3. jquery.layout框架分割线

    css <link href="${base}/res/common/css/jquery.layout/jquery.layout.css" rel="style ...

  4. [开心IT面试题] realloc用法

    C++面试题中另一个大板块——内存管理,主要有malloc(free).new(delete).calloc.realloc等.今天来说说realloc的用法. 1.头文件 #include < ...

  5. 微软.NET各子技术领域的应用前景

    从2002年微软发布.NET 1.0,其间历经了8年的发展,再到.NET 4.0,其已经成为一个庞大而复杂的软件开发与运行平台,架构日益复杂,应用领域也在不断地扩展,包容了“一堆”的子技术领域. 在. ...

  6. 剑指OFFER之把数组排成最小的数(九度OJ1504)

    题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输 ...

  7. ECshop数据库的访问统计和管理员日志的清空

    ECshop是个不错的系统,但是它有一定漏洞,若是访问量巨大的话,大量的访问统计代码会存入数据库的ecs_stats表中,甚至几天就可以达到几百兆,严重的网站直接就崩溃了.数据备份的时候也有很多不便, ...

  8. JQuery Mobile navbar动态刷新创建

    今天突然用到须要动态改变tab页, 布局代码例如以下: <div data-role="navbar" id='divtab'> <ul id='divtabul ...

  9. Clover

    为您的 Windows Explorer 插上翅膀! Clover 是 Windows Explorer 资源管理器的一个扩展,为其增加类似谷歌 Chrome 浏览器的多标签页功能. 方便的 Tab ...

  10. linux 参数优化

    脏页 vm.dirty_background_radio=10 (当脏页占内存10%,pdflush工作) vm.dirty_radio=40 (当进程自身脏页占内存40%,进程自己处理脏页,将其写入 ...