基于Swift使用FMDB实现(增删改查+搜索+聊天置顶)

前端之家收集整理的这篇文章主要介绍了基于Swift使用FMDB实现(增删改查+搜索+聊天置顶)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Pod引入FMDB框架(记得加use_frameworks!),引入头文件import FMDB

写一个DBManager类

  1. class DBManager: NSObject {
  2.  
  3. static let shareManager = DBManager()
  4. var dbQueue: FMDatabaseQueue?
  5. func openDB() {
  6. let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true).first
  7. let userPath = documentDirectory?.stringByAppendingPathComponent(path: "data10001")
  8. if !FileManager.default.fileExists(atPath: userPath!) {
  9. guard ((try? FileManager.default.createDirectory(atPath: userPath!,withIntermediateDirectories: false,attributes: nil)) != nil) else {
  10. return
  11. }
  12. }
  13. let fileName = userPath?.stringByAppendingPathComponent(path: "person.db")
  14. dbQueue = FMDatabaseQueue(path: fileName)
  15. }
  16. }
  17.  
  18. extension String {
  19. //给String扩展一个stringByAppendingPathComponent方法
  20. func stringByAppendingPathComponent(path: String) -> String {
  21. let nsString = self as NSString
  22. return nsString.appendingPathComponent(path)
  23. }
  24. }

每一张表写一个DAO(Data Access Object),写sql语句操作数据库,暴露接口,例如TABLE_LIST表的ListDAO的部分代码

  1. /// 单例
  2. static let shareDAO = ListDAO()
  3.  
  4. /// 创建表
  5. func creatTable() {
  6. let sqlString = "CREATE TABLE IF NOT EXISTS TABLE_LIST('personId' Integer,'name' Text,'isTop' Integer)" //字段的单引号可有可没有
  7. DBManager.shareManager.dbQueue?.inDatabase({ (db) in
  8. guard (db?.executeUpdate(sqlString,withArgumentsIn: [])) != nil else {
  9. return
  10. }
  11. })
  12. }
  13.  
  14. /// 删除
  15. func dropTable() {
  16. let sqlString = "DROP TABLE TABLE_LIST"
  17. DBManager.shareManager.dbQueue?.inDatabase({ (db) in
  18. guard (db?.executeUpdate(sqlString,withArgumentsIn: [])) != nil else {
  19. return
  20. }
  21. })
  22. }
  23.  
  24. /// 插入数据
  25. func insertData(model: ListModel) {
  26. let sqlString = "INSERT OR REPLACE INTO TABLE_LIST(personId,name,isTop) values (?,?,?)"
  27. DBManager.shareManager.dbQueue?.inDatabase({ (db) in
  28. guard (db?.executeUpdate(sqlString,withArgumentsIn: [model.personId,model.name,model.isTop]))! else {
  29. return
  30. }
  31. })
  32. }
  33.  
  34. /// 获取数据(已经置顶)
  35. func getDataList() -> Array<ListModel> {
  36. var resultArray = Array<Any>()
  37. DBManager.shareManager.dbQueue?.inDatabase({ (db) in
  38. //无条件全量查找
  39. //let sqlString = "SELECT * FROM TABLE_LIST";
  40. //根据isTop字段降序输出
  41. let sqlString = "SELECT * FROM TABLE_LIST ORDER BY isTop DESC";
  42. guard let set = try? db?.executeQuery(sqlString,values: []) else {
  43. return
  44. }
  45. while (set?.next())! {
  46. let model = ListModel()
  47. model.personId = Int((set?.int(forColumn: "personId"))!)
  48. model.name = set?.string(forColumn: "name")
  49. model.isTop = (set?.bool(forColumn: "isTop"))!
  50. resultArray.append(model)
  51. }
  52. set?.close()
  53. })
  54. return resultArray as! Array<ListModel>
  55. }
  56.  
  57. /// 删除单条数据
  58. func deleteDataOfDataList(personId: Int) -> Bool {
  59. var result: Bool = false
  60. DBManager.shareManager.dbQueue?.inDatabase({ (db) in
  61. let sqlString = "DELETE FROM TABLE_LIST WHERE personId = ?"
  62. result = (db?.executeUpdate(sqlString,withArgumentsIn: [personId]))!
  63. })
  64. return result
  65. }
  66.  
  67. /// 置顶操作
  68. func setTopWithPersonId(personId: Int,isTop: Bool) -> Bool {
  69. var result: Bool = false
  70. DBManager.shareManager.dbQueue?.inDatabase({ (db) in
  71. let sqlString = "UPDATE TABLE_LIST SET isTop = ? WHERE personId = ?"
  72. result = (db?.executeUpdate(sqlString,withArgumentsIn: [isTop,personId]))!
  73. })
  74. return result
  75. }

TABLE_DETAIL表的DetailDAO的部分代码

  1. /// 查询数据
  2. func getDataListWithString(string: String) -> Array<Any> {
  3. var resultArray = Array<Any>()
  4. DBManager.shareManager.dbQueue?.inDatabase({ (db) in
  5. // LIKE '%Java%'查询des字段中包含Java的,LIKE 'Java*' 查询以Java开头的,'*Java查询以Java结尾的'
  6. // 查询 TABLE_DETAIL 表中包含string的model
  7. let sqlString = "SELECT * FROM TABLE_DETAIL WHERE des LIKE '%" + string + "%'"
  8. guard let set = try? db?.executeQuery(sqlString,values: []) else {
  9. return
  10. }
  11. while (set?.next())! {
  12. let model = DetailModel()
  13. model.desId = Int((set?.int(forColumn: "desId"))!)
  14. model.des = set?.string(forColumn: "des")
  15. resultArray.append(model)
  16. }
  17. set?.close()
  18. })
  19. return resultArray
  20. }

DEMO效果

DEMO地址

猜你在找的Swift相关文章