Swift使用FMDB操作SQLite

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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 Foundationvarlogs =[FeedLog]()classDb{classfunc getDb()->FMDatabase{

let filemgr=NSFileManager.defaultManager()

let dirPaths=NSSearchPathForDirectoriesInDomains(.DocumentDirectory,

.UserDomainMask,true)

let docsDir= dirPaths[0]asStringvardatabasePath = docsDir.stringByAppendingPathComponent("feedlog.db")if!filemgr.fileExistsAtPath(databasePath) {

let db=FMDatabase(path: databasePath)ifdb ==nil {PRintln("Error: \(db.lastErrorMessage())")

}ifdb.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)returnfeedlogDb

}

}

插入数据

classfunc 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()

}

更新数据

classfunc 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()

}

删除数据

classfunc remove(id:String){

let sql="DELETE FROM FEEDLOGS WHERE ID = ?"let db=Db.getDb()

db.open()

db.executeUpdate(sql, withArgumentsInArray: [id])

db.close()

}

查询数据

classfuncselect(id:String)->FeedLog?{

let sql="SELECT * FROM FEEDLOGS WHERE ID = ?"let db=Db.getDb()

db.open()

let rs=db.executeQuery(sql, withArgumentsInArray: [id])varlog:FeedLog?=FeedLog()whilers.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()returnlog

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航