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();
}
}