Swift(FMDB的简单使用)

简介: Swift(FMDB的简单使用)
一、FMDB的简单介绍


  • 1.1、FMDB 的概念
  • FMDB是iOS平台的SQLite数据库框架
  • FMDB以OC的方式封装了SQLite的C语言的API
  • 1.2、FMDB的优点
  • 使用起来更加面向对象,省去了很多的麻烦,冗余的C语言代码
  • 提供了多线程安全的数据库操作方法,有效地防止数据库的混乱
  • 1.3、FMDB 的三个主要的类
  • FMDatabaseprivate var db: OpaquePointer? = nil
  • 一个FMDatabase对象就代表一个单独的SQLite数据库
  • 用来执行SQL语句
  • FMResultSet :使用FMDatabase执行查询后的结果集
  • FMDatabaseQueue: 用于在多线程中执行多个查询或更新,它是线程安全的


二、在Swift里面使用FMDB是无法使用CocoaPods导入的,需要做如下的步骤


image.png


2.1、在官方gitHub下载FMDB


image.png


还有一个扩展类:

image.png


2.2、创建桥接文件

image.png


  • 2.3、桥接文件里面导入 : #import "FMDB.h"
  • 2.4、添加libsqlite3.tbd库,General->TARGETS->Linked Frameorks and Libraries点击加号添加下面的库

image.png

  • 2.5、做完上面的步骤运行一下,如果没有报错就证明你导入成功了


三、FMDB的使用


  • 3.0、FMDB三个重要的类:
  • 1、FMDatabase 数据库对象  (线程不安全)
  • 2、FMResultSet 结果集
  • 3、FMDatabaseQueue 数据库对象(线程安全)
  • 3.1、创建一个类(JKSQLiteManger)来管理数据,将其设置为单粒


class JKSQLiteManger: NSObject {
     // MARK: 1、单粒
     private static let manger: JKSQLiteManger = JKSQLiteManger()
     class func shareManger() -> JKSQLiteManger {
        return manger
     }
 }
  • 3.2、打开数据库创建表(只有先做这两步才可以做其他的操作)


// MARK: 2、数据库的创建&表的创建
  var db: FMDatabase?
  func openDB(DBName: String) {
     // 1.根据传入的数据库名称拼接数据库的路径
     let path = String.cacheDir()+"/\(DBName)"
     print("数据库的路径=\(path)")
     // 2.创建数据库对象
     db = FMDatabase(path: path)
     // 3.打开数据库
     // open方法特点:
     /**
        如果指定路径对应的数据库文件已经存在, 就会直接打开
        否则, 就会创建一个新的
      */
      if !db!.open() {
         print("打开数据库失败")
          return
      }
      createTable()
   }
   // MARK: 3、创建表
   func createTable() {
      // 1.编写SQL语句
      // id: 主键  name和age是字段名
      let sql = "CREATE TABLE IF NOT EXISTS T_Person( \n" +
      "id INTEGER PRIMARY KEY AUTOINCREMENT, \n" +
      "name TEXT, \n" +
      "age INTEGER \n" +
      "); \n"
      // 2.执行SQL语句
      // 注意点: 在FMDB中除了查询意外, 都称之为更新
      if db!.executeUpdate(sql: sql, AnyObject.self as AnyObject){
          print("创建表成功")
      }else{
          print("创建表失败")
      }
   }
  • 注意点: 在FMDB中除了查询意外, 都称之为更新
  • 3.3、 插入一条数据(下面两种方式区别是:使用的方法不同),注意预编译插入
  • 正常的插入一条数据


// 1、编写SQLite语句
 let sql = "INSERT INTO T_Person (name,age) VALUES ('\(name!)',\(age));"
 // 2、执行SQLite语句
 return JKSQLiteManger.shareManger().db!.executeUpdate(sql, withArgumentsIn: [])
  • 预编译插入一条数据


// 1、编写SQLite语句
let sql = "INSERT INTO T_Person (name,age) VALUES (?,?);"
// 2、执行SQLite语句
return JKSQLiteManger.shareManger().db!.executeUpdate(sql: sql, name! as AnyObject,age a


image.png

  • 3.4、更新数据


// 1、编写SQLite语句
let sql = "UPDATE T_Person SET name = '\(name!)' WHERE age = \(self.age);"
// 2、执行SQLite语句
return JKSQLiteManger.shareManger().db!.executeUpdate(sql, withArgumentsIn: [])
  • 3.5、删除数据


// 1、编写SQLite语句
let sql = "DELETE FROM T_Person WHERE age = \(self.age);"
// 2、执行SQLite语句
return JKSQLiteManger.shareManger().db!.executeUpdate(sql, withArgumentsIn: [])
  • 3.6、查询数据


let sql = "SELECT * FROM T_Person;"
let res = JKSQLiteManger.shareManger().db!.executeQuery(sql, withArgumentsIn: [])
var models = [Person]()
 while res!.next() {
   let p = Person()
   p.id = (res?.int(forColumn: "id"))!
   p.name = res?.string(forColumn: "name")
   p.age = (res?.int(forColumn: "age"))!
   models.append(p)
 }
 return models


最后附上练习的两个demo : SwiftFMDatabaseQueueSwiftFMDB


目录
相关文章
|
5月前
|
存储 编译器 Swift
Swift笔记:Swift中的扩展语法
Swift笔记:Swift中的扩展语法
139 1
|
存储 数据管理 数据库
CoreData 在 swift UI 中的使用
当谈到在 Swift UI 中进行本地数据持久化,Core Data 是一个强大且常用的解决方案。Core Data 是苹果提供的一种数据存储和管理框架,用于在应用程序中创建、读取、更新和删除数据。它提供了一个对象图管理器,可以将数据映射到对象,并提供了一种简化数据操作的方式。在本文中,我们将深入介绍 Core Data 在 Swift UI 中的使用。
CoreData 在 swift UI 中的使用
|
Shell Swift iOS开发
Swift 实用工具 — SwiftLint
SwiftLint 是一个实用工具,用于实现 Swift 的风格。 在 Xcode 项目构建阶段,集成 SwiftLint 很简单,构建阶段会在编译项目时自动触发 SwiftLint。
282 0
|
Swift iOS开发 MacOS
Swift-进阶 01:Swift源码编译
Swift-进阶 01:Swift源码编译
532 0
Swift-进阶 01:Swift源码编译
|
程序员 API Swift
swift微博第11天(三方框架的导入和手动导入的桥接以及swift单粒)
swift微博第11天(三方框架的导入和手动导入的桥接以及swift单粒)
183 0
swift微博第11天(三方框架的导入和手动导入的桥接以及swift单粒)
|
Swift 开发者 iOS开发
Swift讲解专题十二——方法
Swift讲解专题十二——方法
200 0
|
Java Swift iOS开发
Swift解读专题一——Swift2.2语言预览(二)
Swift解读专题一——Swift2.2语言预览
158 0