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

 

  

  這時候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 Foundation

var 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
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM