当前位置:Gxlcms > 数据库问题 > FMDB在Swift中的基本使用

FMDB在Swift中的基本使用

时间:2021-07-01 10:21:17 帮助过:27人阅读

  1. FMDB是iOS平台的SQLite数据库框架
  2. FMDB以OC的方式封装了SQLite的C语言API
?FMDB的优点
  1. 使用起来更加面向对象,省去了很多麻烦、繁杂的C语言代码
  2. 提供了多线程数据库的操作方法,有效的防止数据混乱
 
FMDB有三个主要的类 ?FMDatabase
  1. 一个FMDBDatabase对象就代表一个单独的SQLite数据库
  2. 用来执行SQL语句
?FMResultSet
  1. 使用FMDatabase执行查询后的结果集
?FMDatabaseQueue
  1. 用于在多线程中查询或者更新,它是线程安全的
 
使用
  • 在github上下载文件,导入文件 包括第二个文件FMDB及第一个文件里面的为swift提供的头文件
  • 添加并配置桥接文件 并#import
  • 导入sqlite3.tbd框架 编译看是否报错
 
下载地址 https://github.com/ccgus/fmdb  
代码: 在APPdelegate里面创建数据库执行以下代码  SQLiteManager.shareManager().openDB("person.sqlite")  
FMDB管理类 import UIKit

class SQLiteManager: NSObject {
   
    privatestaticlet manager: SQLiteManager = SQLiteManager()
    /// 单粒
    classfunc shareManager() -> SQLiteManager {
        return manager
    }
   
   
    var db: FMDatabase?
    /**
    *  打开数据库
     数据库的关闭:
        1.一般在服务端使用数据库要使用完一次就要立刻关闭防止数据混乱
        2.客户端不存在多个运用程序使用一个数据库的情况,不用关闭,可以减少性能消耗
    */
    func openDB(DBName: String)
    {
        // 1.根据传入的数据库名称拼接数据库路径
        let path = docDir(DBName)
        print(path)
       
        // 2.创建数据库对象
        db = FMDatabase(path: path)
       
        // 3.打开数据库
        // open方法特点: 如果指定路径对应的数据库文件已经存在, 就会直接打开如果指定路径对应的数据库文件不存在, 就会创建一个新的
        if !db!.open()
        {
            print("打开数据库失败")
            return
        }
       
        // 4.创建表
        creatTable()
    }
    func docDir(str:String) -> String
    {
        let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).lastasNSString
//        return path.stringByAppendingPathComponent((self as NSString).lastPathComponent)
        return path.stringByAppendingPathComponent((str asNSString).lastPathComponent)
    }
    privatefunc creatTable()
    {
        // 1.编写SQL语句
        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中除了查询意外, 都称之为更新
        ifdb!.executeUpdate(sql, withArgumentsInArray: nil)
        {
            print("创建表成功")
        }else
        {
            print("创建表失败")
        }
    }
Model处理数据类  import UIKit
class Person: NSObject {
    var id: Int = 0
    var age: Int = 0
    var name: String?
   
   
    // MARK: - 执行数据源CRUD的操作
    classfunc loadPersons() -> [Person]
    {
        let sql = "SELECT * FROM T_Person;"
        let res = SQLiteManager.shareManager().db!.executeQuery(sql, withArgumentsInArray: nil)
       
        var models = [Person]()
        // next取出一行数据
        while res.next()
        {
            let p = Person()
            let num = res.intForColumn("id")
            let name = res.stringForColumn("name")
            let age = res.intForColumn("age")
//            print("num = \(num), name = \(name), age = \(age)")
            p.id = Int(num)
            p.name = name
            p.age = Int(age)
            models.append(p)
        }
        return models
    }
   
   
   

人气教程排行