Swift-FMDB实战

作者: FlyElephant | 来源:发表于2017-03-25 20:27 被阅读146次

iOS中如果本地缓存数据库使用的SQLite,绝大数人都使用了FMDB,可以算是标配.如果自己对SQLite原生态的开发方式效率太低,使用FMDB会有种鸟枪换炮的感觉.FMDB相比于原生态的SQLite的查询做出了很多优化,查询更新方法非常简单易用.

FMDB配置

新建Swift项目,下载FMDB项目,将以下四个文件添加至新的项目中:


FlyElephant.png

数据库初始化:
<pre><code>`class DataManager {

static let shareIntance:DataManager = DataManager()

var db:FMDatabase = FMDatabase()

func createDataBase(dataName:String) {
    
    let path:String = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0]
    
    let finalPath:String = path.appending("/\(dataName)")
    
    print("数据存储地址:\(finalPath)")
    
    db = FMDatabase(path: finalPath)
    
    if db.open() {
        print("数据库打开成功")
    }
}

}`</code></pre>

订单表中相比之前变化不大,查询方法有所优化:
<pre><code>`class Order {

var db:FMDatabase = DataManager.shareIntance.db

var orderName:String = ""
var orderNumber:Int = 0

// 创建订单表
func createTable()  {
    let createTableSQL = "CREATE TABLE IF NOT EXISTS 't_order' ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'orderName' TEXT,'orderNumber' INTEGER);"
    
    let result = db.executeUpdate(createTableSQL, withArgumentsIn: nil)
    
    if result {
        print("创建表格成功")
    }
}

// MARK:- 插入数据
func insertOrder() {
    let insertSQL = "INSERT INTO t_order (orderName, orderNumber) VALUES (\"\(self.orderName)\", \(self.orderNumber));"
    
    let result = db.executeUpdate(insertSQL, withArgumentsIn: nil)
    
    if result {
        print("数据新增成功")
    }
}

func searchData() {
    let querySQL = "SELECT * FROM t_order"
    
    var resultSet:FMResultSet?
    
    do {
        try resultSet =  db.executeQuery(querySQL, values: nil)
        
        while (resultSet?.next())! {
            let name = resultSet?.string(forColumn: "orderName")
            let number = resultSet?.int(forColumn: "orderNumber")
            print("订单编号:\(number!)--订单名称:\(name!)")
        }
    } catch {
        
    }
    
}

func deleteData() {
    let deleteSQL = "DELETE FROM t_order WHERE id = 1"
    
    let result = db.executeUpdate(deleteSQL, withArgumentsIn: nil)
    
    if result {
        print("数据删除成功")
    }
}

func updateData() {
    let updateSQL = "UPDATE t_order SET orderName = '花生' WHERE id = 1"
    
    let result = db.executeUpdate(updateSQL, withArgumentsIn: nil)
    
    if result {
        print("修改成功")
    }
}

}
`</code></pre>

实际测试

关于字段SQL语句网上有很多,基本上差别不大,完全看自己的业务情况,通过简单查询,删除,更新来验证代码:


FlyElephant.png

<pre><code>` override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

    let dataManager:DataManager = DataManager.shareIntance
    
    dataManager.createDataBase(dataName: "FlyElephant.sqlite")
    
    let order = Order()
    order.createTable()
    
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


@IBAction func addAction(_ sender: UIButton) {
    for i in 0...10 {
        let order:Order = Order()
        order.orderNumber = i
        order.orderName = "FlyElephant-\(i)"
        order.insertOrder()
    }
}

@IBAction func updateAction(_ sender: UIButton) {
    let order:Order = Order()
    order.updateData()
}

@IBAction func searchAction(_ sender: UIButton) {
    let order:Order = Order()
    order.searchData()
}

@IBAction func deleteAction(_ sender: UIButton) {
    let order:Order = Order()
    order.deleteData()
}

`</code></pre>

测试结果如下:


Paste_Image.png

相关文章

  • Swift-FMDB实战

    iOS中如果本地缓存数据库使用的SQLite,绝大数人都使用了FMDB,可以算是标配.如果自己对SQLite原生态...

  • Swift-FMDB的使用

    1.什么是FMDB: FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言...

  • swift-FMDB简单使用

    FMDB本质是对SQLit3.0的封装,使用步骤一样 1.创建一个类来管理数据库 2.将该类设计成单例 3.打开或...

  • Taro/微信小程序 swiper

    实战1: 实战2: 实战1: 实战2:

  • RocketMQ

    RocketMQ实战(一)RocketMQ实战(二)RocketMQ实战(三):分布式事务RocketMQ实战(四...

  • freeCodeCamp 旅途10 - 算法实战

    项目实战:回文检查器 项目实战:罗马数字转换器 项目实战:凯撒密码 项目实战:电话号码验证器 项目实战:收银机

  • MySQL实战 目录

    MySQL实战 MySQL实战1 数据库概念介绍MySQL实战2 语法、筛选条件和函数MySQL实战3 分组查询和...

  • unittest+requests框架

    接口测试实战实战思维导图

  • egret 白鹭引擎参考教学

    Egret Wing实战教程 Egret Wing实战教程(一):从按钮说起Egret Wing实战教程(二):自...

  • 内存泄露

    内存泄露 实战 实战Go内存泄露 - Go语言实战 - SegmentFault 思否 总结 pprof工具 使用...

网友评论

  • 溜溜leesin:fmdb一次增加多个字段怎么写吗 请指教

本文标题:Swift-FMDB实战

本文链接:https://www.haomeiwen.com/subject/imocottx.html