Swift使用FMDB操作SQLite

时间:2023-03-09 15:21:54
Swift使用FMDB操作SQLite

  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项目中。

  Swift使用FMDB操作SQLite

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

  Swift使用FMDB操作SQLite

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

  Swift使用FMDB操作SQLite

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

  3.使用

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

  获取数据库

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

//
// Db.swift
// BabyLog
//
// Created by mj.zhou on 15/3/4.
// Copyright (c) 2015年 mjstudio. All rights reserved.
// import Foundation var logs = [FeedLog]() class Db{ class func getDb()->FMDatabase{ let filemgr = NSFileManager.defaultManager()
let dirPaths =
NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
.UserDomainMask, true) let docsDir = dirPaths[] 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
}