ios学习笔记之FMDB的基本使用

一 前言

学习如何使用FMDB框架,最好的办法就是阅读官方文档,在github上搜索“FMDB”,找到该框架,可以通过CocoaPods来安装,也可以Download下来,然后按照说明,把fmdb文件夹直接拖到项目里,那么你还需要导入libsqlite3.0.tbd,swift版还要创建桥接头文件,输入#import "FMDB.h"

二 示例
1 普通版

在桌面创建一个文件夹db,然后在项目里创建一个类SQLiteTool

import Foundation

class SQLiteTool : NSObject{
// 创建一个单例,方便调用方法
static let shareInstance = SQLiteTool()
    
var db:FMDatabase?
override init() {
        super.init()
        
//        打开创建一个数据库
        db = FMDatabase(path:"Users/huwenkuan/Desktop/db/demo.sqlite")
        if (db?.open())! {
            print("创建数据库成功")
            createTable() // 默认就给他创建一个表
        }else{
            print("创建数据库失败")
        }
        
    }


// 创建一个表t_stu
func createTable() -> () {
        let sql = "create table if not exists t_stu(id integer primary key autoincrement,name text not null,age integer,score real default 60) "
        
        let result = db?.executeUpdate(sql, withArgumentsIn: nil)
        
        if result! {
            print("yes")
        }else{
            print("no")
        }
}

// 插入一行数据
func insertRecord() -> () {
        let sql = "insert into t_stu(name,age,score) values('zhangsan',19,99.0)"
        
        let result = db?.executeUpdate(sql, withArgumentsIn: nil)
        
        if result!{
            print("插入数据成功")
        }else{
            print("插入数据失败")
        }
        
    }


// 查询所有数据
func queryAll() -> () {
        let sql = "select * from t_stu"
        
//        用一个结构体接收返回的数据
       guard let resultSet = db?.executeQuery(sql, withArgumentsIn: nil)
        else{
            return
        }
        
        
//        遍历这个结构体
        while resultSet.next() {
            let name = resultSet.string(forColumn: "name")
            let id = resultSet.int(forColumn: "id")
            let age = resultSet.int(forColumn: "age")
            let score = resultSet.double(forColumn: "score")
            
            print(name,id,age,score)
        }
        
        
        
    }

//  执行多条语句
func executeStaments() -> () {
        let sql = "insert into t_stu(name,age,score) values('zhangsanfeng',21,83.0);insert into t_stu(name,age,score) values('wangermazi',22,68.0);insert into t_stu(name,age,score) values('lala',23,85.0);insert into t_stu(name,age,score) values('lili',25,38.0)"
        
        let result = db?.executeStatements(sql)
        
        if result! {
            print("多条语句执行成功")
        }else{
            print("多条语句执行失败")
        }
}


}

在控制器调用查看结果:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
   
        SQLiteTool.shareInstance.insertRecord()
        、、、
    }


}
2 线程安全版
class SQLiteTool : NSObject{
    static let shareInstance = SQLiteTool()
   
//  给出路径,默认帮你创建数据库 ,无需调用open方法
    var dbQueue:FMDatabaseQueue = FMDatabaseQueue(path:"Users/huwenkuan/Desktop/db/demo.sqlite")

// 创建表
func createTable() -> () {
        let sql = "create table if not exists t_stu(id integer primary key autoincrement,name text not null,age integer,score real default 60) "
    
        //  inDatabase方法其实是开启了同步线程,归到同一个队列里去操作
        dbQueue.inDatabase { (db:FMDatabase?) in

// 在此处执行创建表的语句,保证线程安全
            let result = db?.executeUpdate(sql, withArgumentsIn: nil)
            // 
                    if result! {
                        print("yes")
                    }else{
                        print("no")
                    }
        }    
    }


//  同时执行多条语句
func executeStaments() -> () {
        let sql = "insert into t_stu(name,age,score) values('zhangsanfeng',21,83.0);insert into t_stu(name,age,score) values('wangermazi',22,68.0);insert into t_stu(name,age,score) values('lala',23,85.0);insert into t_stu(name,age,score) values('lili',25,38.0)"
        
        
//        线程安全做法
        dbQueue.inDatabase { (db:FMDatabase?) in
            let result = db?.executeStatements(sql)
            //
                    if result! {
                        print("多条语句执行成功")
                    }else{
                        print("多条语句执行失败")
                    }
        }
        
    }

// 开启事务
func transaction() -> () {
        let sql0 = "insert into t_stu(name,age,score) values('haha',8,20.0)"
        let sql1 = "insert into t_stu(name,age,score) values('da',9,21.0)"
        
        dbQueue.inTransaction { (db:FMDatabase?, rollback) in
            let result0 = db?.executeUpdate(sql0, withArgumentsIn: nil)
            let result1 = db?.executeUpdate(sql1, withArgumentsIn: nil)
            
            
            if result0! && result1! {
                print("事务执行成功")
            }else{
//                rollback?.memory = true
            }
        }
        
        
    }

}

在控制器调用

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        SQLiteTool.shareInstance.transaction()
        
        
        
    }


}

你可能感兴趣的:(ios学习笔记之FMDB的基本使用)