FMDB在swift中的使用

1.什么是FMDB

由于iOS中使用C语言函数对原生SQLite数据库进行增删改查操作,复杂麻烦,所以就出现了一系列的SQLite API封装库,如FMDB。
FMDB是针对libsqlite3框架进行封装的三方,它以OC的方式封装了SQLite的C语言的API,使用步骤与SQLite相似

FMDB优点:

1.使用面向对象,避免了复杂的C语言
2.对比苹果自带的Core Data框架,更加轻量级和灵活
3.提供了多线程安全处理数据库方法,保证安全和数据准确性
FMDB 在Git上的下载链接地址:https://github.com/ccgus/fmdb

主要对象

1.FMDatabase: 数据库对象,一个对象代表一个数据库,通过sqlite可进行增删改查

2.FMDatabaseQueue:多线程安全操作数据库 保证数据安全

3.FMResultSet: 返回操作数据库后的结果集

导入步骤

很多文章都有 这里就不在详细叙述了

就开始吧

1.由于是swift 项目,导入fmdb文件之后 需要在桥接文件那里添加一下fmdb的头文件 #import"FMDB.h"

这样可以愉快的写代码啦

单例类 DatabaseHelper

初始化

func initDatabase() {
        let db = self.getDBQueue()
        db.inDatabase { (db) in
            //创建            
            self.createTable(db: db)
        }
    }

初始化 FMDatabaseQueue(多线程安全)

func getDBQueue() -> FMDatabaseQueue {
        if dbQueue == nil {
            let dbPath = self.getDataBasePath()
            dbQueue = FMDatabaseQueue(path: dbPath)
        }
        return dbQueue!
    }

获取db存放路径

func getDataBasePath() -> String{
        let docuPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let dbPath = docuPath.appending("/aliwatch.db")
        DDLogDebug("\(dbPath)")
        return dbPath
    }

创建表

func createTable(db: FMDatabase){
        let sql = "CREATE TABLE IF NOT EXISTS t_list_watch (" +
            "'_id' INTEGER PRIMARY KEY AUTOINCREMENT," +
            "'name' TEXT NOT NULL," +
            "'age' INTEGER DEFAULT 0)"
        let result = db.executeUpdate(sql, withArgumentsIn: [])
        if result {
            DDLogVerbose("create t_list_watch sucessfully!")
        }
    }

插入数据

func insertWatchInfo(name: String,age: Int) {
        // DatabaseHelper.shareInstance 是个单例类 
        let db: FMDatabaseQueue = SWDatabaseHelper.shareInstance.getDBQueue()
        db.inTransaction { (db, rollback) in
            let sql = "INSERT INTO t_list_watch (name,age) VALUES (?,?)"
            let result = db.executeUpdate(sql, withArgumentsIn: [name, age])
            if result {
                print("DB insert WatchList:\(deviceModel!.dev_id!) success")
            } else {
                print("DB insert WatchList:\(deviceModel!.dev_id!) fail")
            }
        }
    }

查询数据

func getList() {
        let db = SWDatabaseHelper.shareInstance.getDBQueue()
        db.inTransaction { (db, rollback) in
            let sql = "SELECT * FROM t_list_watch"
            let resultSet = db.executeQuery(sql, withArgumentsIn: [])
            guard resultSet != nil else {return}
            while(resultSet!.next()) {
                print(resultSet?.string(forColumn: "name"))
                print(resultSet?.string(forColumn: "age"))
            }
        }
    }

删除

let sql = "delete from 't_list_watch' where ID = ?"

更新

let sql = "update 't_student' set ID = ? where name = ?"

谈谈FMDB中SQL的事务特性

事务是恢复和并发控制的基本单位
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生x阅读 15,967评论 3 119
  • 刚才午睡,不知道是在梦中,还是我脑海里想的,我开车带着儿子,在很高的悬崖边刹车。车子的前半身已悬浮在半空中,后半身...
    陈果1225阅读 132评论 0 0
  • 本文是我加入【007-7班】的第一篇文章,进入到微群之后,看了一些战友的文章。结构明确,语言流畅,逻辑清晰,有的已...
    夜猫小七阅读 610评论 2 7
  • 你是我的OK绷-浪花兄弟/周杰伦 正在下笔开始第一篇文章的时候看向窗外寻找灵感,一对对情侣同学谈着小...
    自会IOenol阅读 112评论 0 0