在 Swift 里使用 SQLite 数据库

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看214 回复回复2 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 214|回复: 2
收起左侧

在 Swift 里使用 SQLite 数据库

[复制链接]
swifter 发表于 2016-8-3 08:35:18 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑




1、SQLite

说起 SQLite,它和你熟知的 MySQL 一样,都是关系型数据库管理系统,但与后者不同的地方在于,它完全不需要对应的独立服务器!

一般说起来,SQLite 都是以文件的形式存在,大多用在应用的内嵌储存里。通过在应用代码里加载 SQLite 库,就可以很方便地直接存取 SQLite 文件里的数据了。

SQLite 由 C 编写,所以你懂的,要调用它的库,一定也是 C 语言,什么指针啦……


要访问 SQLite 数据库里的数据——毕竟还是数据库,所以你只需要像访问其他数据库一样,在程序内使用 SQL 即可。




2、FMDB

当然了,虽然 Swift 本身也可以桥接 C 语言来使用 SQLite 库,但这样太麻烦了,尤其 C 不是 OOP ,你可能一下子用起来也不习惯,这里我们介绍最流行的第三方库:FMDB (Flying Meat Database)。

它把 SQLite 库的所有功能用 OC 封装,这样我们用起来就方便多了。得益于 Xcode 的高能,我们可以直接全自动地把 FMDB 的 OC 代码桥接为 Swift 。




3、导入代码

从 Github 下载 FMDB 项目文件之后,到它的  src 目录中,将所有的  .h 和  .m 文件(OC 代码文件)拖入你 Xcode 要使用 FMDB 的项目的文件目录中,这时候 Xcode 会检测到你导入了 Objective-C 的代码,会提示你是否创建桥接文件,确认之后,桥接文件会自动创建。

接下来编辑生成的桥接文件,在里边加入一句话:

[Swift] 纯文本查看 复制代码
#import "FMDB.h"


这样,就导入成功了。




4、链接 SQLite 库

当然了,只导入了 FMDB 是不够的,它不能直接操作 SQLite 文件,我们还需要给项目链接 FMDB 所依赖的 SQLite 库,如果你现在直接编译,会遇到 39 个错误。

在 Swift 里使用 SQLite 数据库 在 Xcode 项目里为 FMDB 添加 SQLite 库链接

在 Swift 里使用 SQLite 数据库 - 敏捷大拇指 - 在 Swift 里使用 SQLite 数据库  在 Xcode 项目里为 FMDB 添加 SQLite 库链接

在 Xcode 项目里为 FMDB 添加 SQLite 库链接

  • 点击你 Xcode 左侧文件树最顶端的项目文件;
  • 在中间一栏选择你的编译目标;
  • 在右侧选择“Build Phases”选项卡;
  • 在“Link Binary With Libaraies”选项中点击加号;
  • 搜索并添加  libsqlite3.0.dylib 。





5、使用 FMDB

我们给 FMDB 传入数据库地址即可,如果对应地址的文件不存在,则 FMDB 会尝试创建文件然后打开。

你也可以不传入文件地址,这样的话 FMDB 就会把数据库创建在临时位置,一旦断开,文件也就没了。


[Swift] 纯文本查看 复制代码
let documents = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
let fileURL = documents.URLByAppendingPathComponent("test.sqlite")
 
let database = FMDatabase(path: fileURL.path)


使用之前需要先打开数据库,使用如下语句:

[Swift] 纯文本查看 复制代码
if !database.open() {
    print("Unable to open database")
    return
}


如果执行成功,说明已经成功打开数据库,接下来就可以执行 SQL 了:

[Swift] 纯文本查看 复制代码
do {
    try database.executeUpdate("create table test(x text, y text, z text)", values: nil)
    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["a", "b", "c"])
    try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["e", "f", "g"])
 
    let rs = try database.executeQuery("select x, y, z from test", values: nil)
    while rs.next() {
        let x = rs.stringForColumn("x")
        let y = rs.stringForColumn("y")
        let z = rs.stringForColumn("z")
        print("x = \(x); y = \(y); z = \(z)")
    }
} catch let error as NSError {
    print("failed: \(error.localizedDescription)")
}


这里执行语句可以是所有的 SQL,使用  ? 作为占位符,然后把要写入的值放到后边的参数数组里作为形式参数传入,注意占位符的数量一定要和数组长度相等!

执行完毕之后,关闭数据库:

[Swift] 纯文本查看 复制代码
database.close()


当然了,实际使用当中,你应该在创建一个 Model 来管理数据库的存取,而不是直接在代码中执行 SQL,这样才符合 OOP 的设计原则。




6、了解更多

http://www.sqlite.org

github.com/ccgus/fmdb

http://www.theappguruz.com/blog/use-sqlite-database-swift




作者:R0uter

都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。您的赞赏是我前进的方向。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

评分

参与人数 1金钱 +10 贡献 +10 专家分 +10 收起 理由
Anewczs + 10 + 10 + 10 32个赞!专家给力!

查看全部评分

本帖被以下淘专辑推荐:

3rdev 发表于 2016-8-5 05:51:31 | 显示全部楼层
有谁比较过这几种数据库啊?