swift中用FMDB封装数据库

class DataManager: NSObject {

//定义一个单例对象(类对象)
//系统中shareManager、defaultManager、standerdManager这一类获取的对象一般都是单例对象
static let shareManager = DataManager()

//定义管理数据库的对象
let fmdb:FMDatabase!

//线程锁,通过加锁和解锁来保证所做操作数据的安全性
let lock = NSLock()

//1.重写父类的构造方法
override init() {
    //设置数据库的路径;fmdb.sqlite是由自己随意命名
    let path = NSHomeDirectory().stringByAppendingString("/Documents/fmdb.sqlite")
    //构造管理数据库的对象
    fmdb = FMDatabase(path: path)
    //判断数据库是否打开成功;如果打开失败则需要创建数据库
    if !fmdb.open() {
        print("数据库打开失败")
        return
    }
    //创建数据库
    //student表达表名,由自己命名
    //userName,passWord是需要收藏的模型中的字段,须根模型中保持一致
    //varchar表示字符串,integer表示数字,blob表示二进制数据NSData
    let createSql = "create table if not exists student(userName varchar(1024),passWord varchar(1024))"
    
    //执行sel语句进行数据库的创建
    do {
        try fmdb.executeUpdate(createSql, values: nil)
    }catch {
        print(fmdb.lastErrorMessage())
    }
}

//2.增
func insertDataWith(model:StudentModel) {

    //加锁操作
    lock.lock()
    //sel语句
    //(?,?)表示需要传的值,对应前面出现几个字段,后面就有几个问号
    let insetSql = "insert into student(userName, passWord) values(?,?)"
    //更新数据库
    do {
        try fmdb.executeUpdate(insetSql, values: [model.userName!,model.passWord!])
    }catch {
        print(fmdb.lastErrorMessage())
    }
    
    //解锁
    lock.unlock()
}

//3.删
func deleteDataWith(model:StudentModel) {

    //加锁操作
    lock.lock()
    //sel语句
    //where表示需要删除的对象的索引,是对应的条件
    let deleteSql = "delete from student where userName = ?"
    //更新数据库
    do{
        try fmdb.executeUpdate(deleteSql, values: [model.userName!])
    }catch {
        print(fmdb.lastErrorMessage())
    }
    
    //解锁
    lock.unlock()
}

//4.改
func updateDataWith(model:StudentModel,daraID:String) {

    //加锁
    lock.lock()
    //where id = ?中的id可传可不传
    let updateSql = "update student set userName = ?,passWord = ? where id = ?"
    //更新数据库
    do{
        try fmdb.executeUpdate(updateSql, values: [model.userName!,model.passWord!])
    }catch {
        print(fmdb.lastErrorMessage())
    }
    
    //解锁
    lock.unlock()
}

//5.判断数据库中是否有当前数据(查找一条数据)
func isHasDataInTable(model:StudentModel) -> Bool {

    let isHas = "select * from student where userName = ?"
    do{
        let set = try fmdb.executeQuery(isHas, values: [model.userName!])
        //查找当前行,如果数据存在,则接着查找下一行
        if set.next() {
            return true
        }else {
            return false
        }
    }catch {
        print(fmdb.lastErrorMessage())
    }

    return true
}

//6.查找全部数据
func fetchAllData() ->[StudentModel] {

    let fetchSql = "select * from student"
    //用于承接所有数据的临时数组
    var tempArray = [StudentModel]()
    do {
        let set = try fmdb.executeQuery(fetchSql, values: nil)
        //循环遍历结果
        while set.next() {
            let model = StudentModel()
            //给字段赋值
            model.userName = set.stringForColumn("userName")
            model.passWord = set.stringForColumn("passWord")
            tempArray.append(model)
        }
    }catch {
        print(fmdb.lastErrorMessage())
    }
    
    return tempArray
  }
}

你可能感兴趣的:(swift中用FMDB封装数据库)