前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift使用FMDB操作SQLite

Swift使用FMDB操作SQLite

作者头像
MJ.Zhou
发布2022-05-07 16:33:43
6090
发布2022-05-07 16:33:43
举报
文章被收录于专栏:.NET开发那点事.NET开发那点事

  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的简单实例,不多说看代码吧。

获取数据库

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

代码语言:javascript
复制
//
//  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
    }
    
}

插入数据

代码语言:javascript
复制
 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()
    }

更新数据

代码语言:javascript
复制
    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()
    }

删除数据

代码语言:javascript
复制
    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()
    }

查询数据

代码语言:javascript
复制
    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
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •   1.下载
    •   2.建立桥接
    •   3.使用
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档