FMDB在swift中的使用

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/Draven__/article/details/89575167

代码仓库 https://gitee.com/zjf1998/FMDBSwift

什么是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.导入fmdb文件夹:

2.桥接文件:

#import "FMDB.h"

3.创建单例类 DatabaseHelper

//
//  DatabaseHelper.swift
//  FMDBSwift
//
//  Created by sjl on 2019/4/26.
//  Copyright © 2019年 zjut. All rights reserved.
//

import UIKit

class DatabaseHelper: NSObject {
    
    //单例类
    private static let manger: DatabaseHelper = DatabaseHelper()
    class func shareManger() -> DatabaseHelper {
        return manger
    }
    
    var dbQueue:FMDatabaseQueue?            //多线程安全操作数据库 保证数据安全
    
    //初始化
    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")
        print("\(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 {
            print("create t_list_watch sucessfully!")
        }
    }
    
    //插入数据
    func insertWatchInfo(name: String,age: Int) {
        // DatabaseHelper.shareInstance 是个单例类
        let db: FMDatabaseQueue = DatabaseHelper.manger.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 \(name) success")
            } else {
                print("DB insert \(name) fail")
            }
        }
    }
    
    //查询数据
    func getList() {
        let db = DatabaseHelper.manger.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") as Any)
                print(resultSet?.string(forColumn: "age") as Any)
            }
        }
    }
    
    //删除
    func delectByID(id:String) {
        let db = DatabaseHelper.manger.getDBQueue()
        db.inTransaction { (db, rollback) in
            let sql = "delete from 't_list_watch' where _id = ?"
            let result = db.executeUpdate(sql, withArgumentsIn: [id])
            if result {
                print("DB delect \(id) success")
            } else {
                print("DB delect \(id) fail")
            }
        }
    }
    
    //更新
    func updateByID(id:String,name: String) {
        let db = DatabaseHelper.manger.getDBQueue()
        db.inTransaction { (db, rollback) in
            let sql = "update 't_list_watch' set name = ? where _id = ?"
            let result = db.executeUpdate(sql, withArgumentsIn: [name,id])
            if result {
                print("DB update \(id) success")
            } else {
                print("DB update \(id) fail")
            }
        }
    }
    
    
}

初始化数据库:

DatabaseHelper.shareManger().initDatabase()

插入数据 :

DatabaseHelper.shareManger().insertWatchInfo(name: "zhangsan", age: 18)
DatabaseHelper.shareManger().insertWatchInfo(name: "lisi", age: 20)

查找数据
DatabaseHelper.shareManger().getList()

//修改数据
DatabaseHelper.shareManger().updateByID(id: "1", name: "王五") 

  //删除数据
DatabaseHelper.shareManger().delectByID(id: "1")

借鉴自:https://www.jianshu.com/p/d0059ad010f4

https://www.jianshu.com/p/0bfa64b2ecc1 

猜你喜欢

转载自blog.csdn.net/Draven__/article/details/89575167