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)
        db.executeStatements(sql_stmt) {
     println()
    }
    db.close()
   } else {
    println()
   }
  }
  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,51); font-weight:bold">log.type,51); font-weight:bold">log.logTime,51); font-weight:bold">log.logDay,51); font-weight:bold">log.remark])
 db.close()
}

更新数据

 func update(log:FeedLog){
 let sql = UPDATE FeedLOGS SET COUNT=?,TYPE=?,LOGTIME=?,LOGDAY=?,REMARK=? WHERE ID=?log.remark,51); font-weight:bold">log.id])
 db. 删除数据 
 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 = ?open()
 let rs = db.executeQuery(sql,withArgumentsInArray: [id])
 var log:FeedLog?=FeedLog()
 while rs.next() {
  log?.id=rs.stringForColumn(IDlog?.count=Int(rs.intForColumn(COUNT))
  log?.type=Int(rs.intForColumn(TYPElog?.remark=rs.stringForColumn(REMARKlog?.logTime=rs.dateForColumn(LOGTIMElog?.logDay=rs.stringForColumn(LOGDAY)
 }
 db.close()
  log
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...