
Swift使用FMDB操作SQLite
发布日期:2021-05-09 04:12:38
浏览次数:11
分类:博客文章
本文共 3385 字,大约阅读时间需要 11 分钟。
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 }
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月19日 11时40分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ORA-00904: "FILED_TYPE": 标识符无效
2021-05-09
java中DelayQueue的使用
2021-05-09
线程stop和Interrupt
2021-05-09
Android中定时执行任务的3种实现方法
2021-05-09
时间序列神器之争:Prophet VS LSTM
2021-05-09
MapReduce实验
2021-05-09
java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
2021-05-09
[apue] getopt 可能重排参数
2021-05-09
移动互联网恶意软件命名及分类
2021-05-09
PySide图形界面开发(一)
2021-05-09
Github教程(3)
2021-05-09
vue3 template refs dom的引用、组件的引用、获取子组件的值
2021-05-09
Zookeeper快速开始
2021-05-09
882. Reachable Nodes In Subdivided Graph
2021-05-09
402. Remove K Digits
2021-05-09
375. Guess Number Higher or Lower II
2021-05-09
650. 2 Keys Keyboard
2021-05-09
764. Largest Plus Sign
2021-05-09
214. Shortest Palindrome
2021-05-09
916. Word Subsets
2021-05-09