Swift使用FMDB操作SQLite

本文介绍如何在Swift项目中引入并使用Objective-C的FMDB库来操作SQLite数据库,包括下载FMDB、创建桥接头文件及实现增删改查等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值