SQLite
说起 SQLite,它和你熟知的 MySQL 一样,都是关系型数据库管理系统,但与后者不同的地方在于,它完全不需要对应的独立服务器!
一般说起来,SQLite 都是以文件的形式存在,大多用在应用的内嵌储存里。通过在应用代码里加载 SQLite 库,就可以很方便地直接存取 SQLite 文件里的数据了。
SQLite 由 C 编写,所以你懂的,要调用它的库,一定也是 C 语言,什么指针啦……
要访问 SQLite 数据库里的数据——毕竟还是数据库,所以你只需要像访问其他数据库一样,在程序内使用 SQL 即可。
FMDB
当然了,虽然 Swift 本身也可以桥接 C 语言来使用 SQLite 库,但这样太麻烦了,尤其 C 不是 OOP ,你可能一下子用起来也不习惯,这里我们介绍最流行的第三方库:FMDB (Flying Meat Database)。
它把 SQLite 库的所有功能用 OC 封装,这样我们用起来就方便多了。得益于 Xcode 的高能,我们可以直接全自动地把 FMDB 的 OC 代码桥接为 Swift 。
导入代码
从 Github 下载 FMDB 项目文件之后,到它的 src 目录中,将所有的 .h 和 .m 文件(OC 代码文件)拖入你 Xcode 要使用 FMDB 的项目的文件目录中,这时候 Xcode 会检测到你导入了 Objective-C 的代码,会提示你是否创建桥接文件,确认之后,桥接文件会自动创建。
接下来编辑生成的桥接文件,在里边加入一句话:
1 |
#import "FMDB.h" |
这样,就导入成功了。
链接 SQLite 库
当然了,只导入了 FMDB 是不够的,它不能直接操作 SQLite 文件,我们还需要给项目链接 FMDB 所依赖的 SQLite 库,如果你现在直接编译,会遇到 39 个错误。
- 点击你 Xcode 左侧文件树最顶端的项目文件;
- 在中间一栏选择你的编译目标;
- 在右侧选择“Build Phases”选项卡;
- 在“Link Binary With Libaraies”选项中点击加号;
- 搜索并添加 libsqlite3.0.dylib 。
使用 FMDB
我们给 FMDB 传入数据库地址即可,如果对应地址的文件不存在,则 FMDB 会尝试创建文件然后打开。
你也可以不传入文件地址,这样的话 FMDB 就会把数据库创建在临时位置,一旦断开,文件也就没了。
1 2 3 4 |
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) |
使用之前需要先打开数据库,使用如下语句:
1 2 3 4 |
if !database.open() { print("Unable to open database") return } |
如果执行成功,说明已经成功打开数据库,接下来就可以执行 SQL 了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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,使用 ? 作为占位符,然后把要写入的值放到后边的参数数组里作为形式参数传入,注意占位符的数量一定要和数组长度相等!
执行完毕之后,关闭数据库:
1 |
database.close() |
>当然了,实际使用当中,你应该在创建一个 Model 来管理数据库的存取,而不是直接在代码中执行 SQL,这样才符合 OOP 的设计原则。 ?
了解更多
http://www.theappguruz.com/blog/use-sqlite-database-swift
本文由 落格博客 原创撰写:落格博客 » 在 Swift 里使用 SQLite 数据库
转载请保留出处和原文链接:https://www.logcg.com/archives/1842.html