✓什么是FMDB
  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).last!  asNSString
//        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
    }
   
   
    /**
    插入一条记录
    */
    func insertPerson() -> Bool
    {
       
        assert(name != nil, "必须要给name赋值")
       
        // 1.编写SQL语句
        let sql = "INSERT INTO T_Person" +
        "(name, age)" +
        "VALUES" +
        "(?, ?);"

// 2.执行SQL语句
//        return SQLiteManager.shareManager().db!.executeUpdate(sql, withArgumentsInArray: nil)
       
        returnSQLiteManager.shareManager().db!.executeUpdate(sql, name!, age)
    }
   
    // MARK: - 系统内部方法
    init(dict: [String: AnyObject])
    {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
   
    overrideinit()
    {
        super.init()
    }
   
    overridefunc setValue(value: AnyObject?, forUndefinedKey key: String) {
       
    }
   
    overridevar description: String
        {
        return"id = \(id), age = \(age), name = \(name)"    }

}
}

转载于:https://www.cnblogs.com/chenwanbing/p/5362909.html

FMDB在Swift中的基本使用相关推荐

  1. 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题

    swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer li ...

  2. Swift 中使用 SQLite——批量更新(事务处理)

    本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新. 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态 开始数据操作 如果数据操作成功,提交事 ...

  3. Swift 中使用 SQLite——打开数据库

    关于Swift中使用SQLite,接下来可能会分别从打开.增.删.改.查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开. 定义全局数据库访问句柄 /// 全局数据库访问句柄 pri ...

  4. 探索 Swift 中的 MVC-N 模式

    作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...

  5. Swift 中的内存管理详解

    这篇文章是在阅读<The Swift Programming Language>Automatic Reference Counting(ARC,自动引用计数)一章时做的一些笔记,同时参考 ...

  6. 怎样在swift中创建CocoaPods

    本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...

  7. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  8. Swift中依赖注入的解耦策略

    原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...

  9. swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实

    swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...

  10. swift视图容器_如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图...

    swift视图容器 by Lee Dowthwaite 通过李道思韦特 如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图 (How to create a beautif ...

最新文章

  1. Solr Schema.xml分析
  2. CAD二次开发学习笔记二(创建一个对话框)
  3. mybatis的缓存简说
  4. 转载——C语言中float,double类型,在内存中的结构(存储方式)
  5. fullcaledar日历插件
  6. 学成在线--26.课程图片管理(图片删除)
  7. Android 布局管理器 之 TableLayout
  8. Java线程 生产者--消费者模式总结(二)
  9. 建站教程|小鸟云服务器搭建Wordpress站点
  10. 【数学】微分(Differential)的定义,微分与导数的区别
  11. GD32F4(2): 用keil5打开官方评估版demo,编译报错找不到core_cm4.h文件
  12. 解决方案:ubuntu14.04安装后无法引导win7;Realtek-RTL8723BE无线网卡驱动的安装
  13. 使用Android Profiler连接成功后app闪退中断解决方法
  14. 信息文档管理与配置管理
  15. 【java获取日期的年月日】
  16. 根据数据库中的出生年份计算年龄
  17. SegmentFault 技术周刊 Vol.4 - 这份 Android 有点甜
  18. 我的中软国际实习Day16
  19. torchnet.meter使用记录
  20. B站上线互动视频功能:仅对粉丝量过万的up主开放

热门文章

  1. 哪些场景应用了dsrc通信标准_如何提高量子通信系统的实用性,制约了量子通信系统的应用场景...
  2. b+树时间复杂度_几分钟学会Java实现图的最小生成树:Kruskal算法
  3. php 快速安装,PHP - 快速配置及安装
  4. def __init__(self)是什么意思_Python入门一篇搞懂什么是类
  5. 点击按钮测试用例标题_如何才能设计出高质量的测试用例
  6. python处理json数据(复杂的json转化成嵌套字典并处理)
  7. python 怎么表示阶乘_python表示阶乘
  8. java 实现订单合并_向高手进阶,从 0 开始手写实现一个 RPC 框架!
  9. vue项目的安装与启动
  10. MySQL数据库数据存放位置修改