標籤:
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 }
Swift使用FMDB操作SQLite