博客
关于我
Swift使用FMDB操作SQLite
阅读量:426 次
发布时间:2019-03-06

本文共 3385 字,大约阅读时间需要 11 分钟。

  SQLite大家都懂的。本地数据库,在移动设备上使用广泛。IOS平台上自然也少不了它。最近自己折腾一个小App的时候需要使用sqlite本地数据库,上Github搜了下IOS下对SQLite的三方封装有个星星很多的FMDB。不过是Obiect-C的库,我是使用Swift的,本以为不能用了,不过后折腾了下发现在Swift下使用oc的库非常简单。下面我就介绍下如何在Swift下使用oc的FMDB库。

  1.下载

  第一步自然是去下载FMDB了。https://github.com/ccgus/fmdb

  2.建立桥接

  把下载下来的zip解压。打开项目文件夹,找到fmdb文件夹,把里面所有的文件选中,拖动到你的Swfit项目中。

 

  

  这时候XCode会自动提示你是否要建立桥接,选YES。XCode就会自动建立好oc到Swift的桥接了。

  

  接下来我们在Swift项目下找到一个叫做BabyLog-Bridging-Header的文件,打开编辑。在里面输入:#import "FMDB.h"

  

  这样我们FMDB到Swift的桥接头就建好了。

  3.使用

  有了桥接头,我们就可以欢快的使用FMDB了。下面给出CURD的简单实例,不多说看代码吧。

  获取数据库

  如果数据库不存在则建立数据库表,存在则返回数据库对象。  

////  Db.swift//  BabyLog////  Created by mj.zhou on 15/3/4.//  Copyright (c) 2015年 mjstudio. All rights reserved.//import Foundationvar logs = [FeedLog]()class Db{        class func getDb()->FMDatabase{            let filemgr = NSFileManager.defaultManager()        let dirPaths =        NSSearchPathForDirectoriesInDomains(.DocumentDirectory,            .UserDomainMask, true)                let docsDir = dirPaths[0] as String                var databasePath = docsDir.stringByAppendingPathComponent("feedlog.db")                if !filemgr.fileExistsAtPath(databasePath) {                        let db = FMDatabase(path: databasePath)                        if db == nil {                println("Error: \(db.lastErrorMessage())")            }                        if db.open() {                let sql_stmt = "CREATE TABLE IF NOT EXISTS FEEDLOGS (ID TEXT PRIMARY KEY, COUNT INTEGER, TYPE INTEGER,LOGTIME DATETIME,LOGDAY TEXT, REMARK TEXT)"                if !db.executeStatements(sql_stmt) {                    println("Error: \(db.lastErrorMessage())")                }                db.close()            } else {                println("Error: \(db.lastErrorMessage())")            }        }                let feedlogDb = FMDatabase(path: databasePath)        return feedlogDb    }    }

  插入数据

class func insert(log:FeedLog){                let sql="INSERT INTO FEEDLOGS (ID,COUNT,TYPE,LOGTIME,LOGDAY,REMARK) "+"VALUES (?,?,?,?,?,?)"        let db = Db.getDb()        db.open()        db.executeUpdate(sql, withArgumentsInArray: [log.id,log.count,log.type,log.logTime,log.logDay,log.remark])        db.close()    }

  更新数据

class func update(log:FeedLog){                let sql = "UPDATE FEEDLOGS SET COUNT=?,TYPE=?,LOGTIME=?,LOGDAY=?,REMARK=? WHERE ID=?"        let db = Db.getDb()        db.open()        db.executeUpdate(sql, withArgumentsInArray: [log.count,log.type,log.logTime,log.logDay,log.remark,log.id])        db.close()    }

  删除数据

class func remove(id:String){        let sql = "DELETE FROM FEEDLOGS WHERE ID = ?"        let db = Db.getDb()        db.open()        db.executeUpdate(sql, withArgumentsInArray: [id])        db.close()    }

    查询数据

class func select(id:String)->FeedLog?{                let sql = "SELECT * FROM FEEDLOGS WHERE ID = ?"        let db = Db.getDb()        db.open()        let rs = db.executeQuery(sql, withArgumentsInArray: [id])        var log:FeedLog?=FeedLog()        while rs.next() {            log?.id=rs.stringForColumn("ID")            log?.count=Int(rs.intForColumn("COUNT"))            log?.type=Int(rs.intForColumn("TYPE"))            log?.remark=rs.stringForColumn("REMARK")            log?.logTime=rs.dateForColumn("LOGTIME")            log?.logDay=rs.stringForColumn("LOGDAY")        }        db.close()                return log    }

 

转载地址:http://ildyz.baihongyu.com/

你可能感兴趣的文章
快服务流量之争:如何在快服务中占领一席之地
查看>>
使用Power BI构建数据仓库与BI方案
查看>>
12张图打开JMeter体系结构全局视角
查看>>
Spring Boot 2.x基础教程:构建RESTful API与单元测试
查看>>
[UWP 自定义控件]了解模板化控件(1):基础知识
查看>>
WinUI 3 Preview 3 发布了,再一次试试它的性能
查看>>
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
查看>>
List数组排序
查看>>
VMware vSphere 离线虚拟机安装 BIND 9
查看>>
dojo/request模块整体架构解析
查看>>
dojo的发展历史
查看>>
手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)
查看>>
互联网App应用程序测试流程及测试总结
查看>>
PostgreSQL查询表名称及表结构
查看>>
如何使用google搜索?
查看>>
Redis分布式锁的正确实现方式
查看>>
设计模式-抽象工厂模式
查看>>
IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法
查看>>
IDEA 调试Java代码的两个技巧
查看>>
Vue 数组和对象更新,但视图未更新,背后的故事
查看>>