fmdb的使用

124 阅读2分钟

import UIKit

class AIHistoryDataManager: NSObject {

    var dbUrl : String?

    

    var FMDBEntity : FMDatabase?

    

    var FMDBQueue : FMDatabaseQueue?

    

    // MARK: - 单例

    static let sharedManager: AIHistoryDataManager = {

        let shared = AIHistoryDataManager()

        shared.opendb(dbName: "history.db", tableName: "message")

        return shared

    }()

    private override init() {}

    

    //打开数据库,也就是创建数据库

    func opendb(dbName : String, tableName : String) {

        //在doc文件夹下面创建新的文件夹,用来储存数据库

        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true);

        let docPath = paths[0] + "/(dbName)";

        self.dbUrl = docPath;

        //创建新的数据库

        self.FMDBEntity = FMDatabase.init(path: self.dbUrl);

        //如果数据库存在,就直接打开,如果不存在,则会现在磁盘上创建数据库,然后再打开

        if self.FMDBEntity!.open() {

            print("数据库打开成功");

            //创建数据表

            self.initTable(t_name: tableName);

        }else {

            print("数据库打开失败");

        }

        //数据库每次操作完成以后就应该释放资源

        self.FMDBEntity!.close();

    }

    

    func initTable(t_name : String) {

        let sql = "CREATE TABLE IF NOT EXISTS t_message(id integer PRIMARY KEY AUTOINCREMENT,messageId text UNIQUE NOT NULL, pageTypeID text NOT NULL, questionContent text, answerContent text, createTime real,  status real, remark text, contentStr text, image text, url text, length text);"

        if self.FMDBEntity!.executeUpdate(sql, withArgumentsIn: []) {

            print("数据表创建成功");

        }else {

            print("数据表创建失败");

        }

        

        //数据库新增字段

        if !self.FMDBEntity!.columnExists("age", inTableWithName: "t_message") {

            let alertStr = "ALTER TABLE ("t_message") ADD ("age") text"

            if self.FMDBEntity!.executeUpdate(alertStr, withArgumentsIn: []) {

                print("插入成功");

            }else {

                print("插入失败");

            }

        }

    }

    

    func addMessageWithAIHistoryModel(AIHistoryModel: AIHistoryModel){

        if AIHistoryModel.pageTypeID.count == 0 {

            print("Id不能为空")

            return

        }

        if !self.FMDBEntity!.open() {

            self.FMDBEntity = FMDatabase.init(path: self.dbUrl);

            return

        }

        var sql = "";

//        AIHistoryModel.pageTypeID = (NSUUID().uuidString as NSString).replacingOccurrences(of: "-", with: "")

    

        

        sql = "INSERT INTO t_message(pageTypeID, messageId, questionContent, answerContent,createTime) VALUES('(AIHistoryModel.pageTypeID)','(AIHistoryModel.messageId)', '(AIHistoryModel.questionContent)', '(AIHistoryModel.answerContent)',  '(AIHistoryModel.createTime)')"

        if self.FMDBEntity!.executeUpdate(sql, withArgumentsIn: []){

            print("插入聊天记录成功");

        }else {

            print("插入聊天记录失败");

        }

        self.FMDBEntity!.close();

    }

    

    // 根据sessionId查询消息记录列表

    func queryMessageListWithPageType(pageType: String) ->[AIHistoryModel]{

        if pageType.count == 0 {

            print("页面为空")

            return []

        }

        if !self.FMDBEntity!.open() {

            self.FMDBEntity = FMDatabase.init(path: self.dbUrl);

            return []

        }

        let sql = "SELECT * FROM t_message WHERE t_message.pageTypeID = '(pageType)' order by createTime asc"

        let s = self.FMDBEntity!.executeQuery(sql, withArgumentsIn: [])!

        let array = self.AIHistoryModelArrayWithResultSet(s: s)

        self.FMDBEntity!.close()

        return array

    }

    

    // 根据FMResultSet提取消息记录

    func AIHistoryModelArrayWithResultSet(s: FMResultSet) ->[AIHistoryModel] {

        var array: [AIHistoryModel] = []

        while s.next() {

            let AIHistoryModel = AIHistoryModel()

            AIHistoryModel.messageId = s.string(forColumn: "messageId") ?? ""

            AIHistoryModel.questionContent = s.string(forColumn: "questionContent") ?? ""

            AIHistoryModel.answerContent = s.string(forColumn: "answerContent") ?? ""

            AIHistoryModel.pageTypeID = s.string(forColumn: "pageTypeID") ?? ""

            AIHistoryModel.createTime = Int(Double(s.string(forColumn: "createTime") ?? "") ?? 0.0)

            array.append(AIHistoryModel)

        }

        return array

    }

    

    // 根据sessionId删除全部消息记录

    func deleteMessageWithMessageId(messageId: String) {

        if messageId.count == 0 {

            print("d不能为空")

            return

        }

        if !self.FMDBEntity!.open() {

            self.FMDBEntity = FMDatabase.init(path: self.dbUrl);

            return

        }

        let sql = "DELETE FROM t_message WHERE messageId = '(messageId)'"

        if self.FMDBEntity!.executeUpdate(sql, withArgumentsIn: []){

            print("删除成功");

        }else {

            print("删除失败");

        }

        self.FMDBEntity!.close();

    }

    

}