swift 下使用fmdb 以及如何使用SQLCipher

找了很多资料关于swift下 如何给 sqlite 加密,发现都没有于是笔者也只能开始搜寻资料了
objc下比较成熟的加密方式 是使用 SQLCipher
具体请浏览
http://www.cnblogs.com/water-wjf/p/4506407.html?utm_source=tuicool
不过这是objc的对于我这种小白肯定是无法进行改写的 还好在找到了fmdb
fmdb也是使用objc写的,不过对swift有支持,最重要的它集成了SQLCipher(高兴吧)下面介绍如何使用
1.使用fmdb推荐安装方式CocoaPods,在你的Podfile里添加
pod 'FMDB/SQLCipher'
如果不需要加密
pod 'FMDB'
什么不知道CocoaPods??请自行百度安装 cocoapods 新的国内源 https://ruby.taobao.org/
之后执行 pod install (比较慢)
2:加密数据库(如果不需要请略过)
安装完成后打开工程的workspace找到下面这个文件

swift 下使用fmdb 以及如何使用SQLCipher_第1张图片

找到 下图者两个函数 在对应位置添加下面2行代码

const char* key = [@"bluescflang412#" UTF8String]; 
//StrongPassword可以修改成你自己的密码
sqlite3_key(_db, key, (int)strlen(key));
swift 下使用fmdb 以及如何使用SQLCipher_第2张图片

修改完成后就好了使用数据库的时候我们的数据库就是加密的啦 哈哈高兴吧
swift使用fmdb的方法 :

let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
//写上自己的数据库名称及路径
let path = documentsFolder.stringByAppendingPathComponent("test.sqlite")
//新建数据库
let database = FMDatabase(path: path)
//打开数据库
if !database.open() {
    print("Unable to open database")
    return
}
//新建表
if!database.executeUpdate("create table test(x text, y text, z text)",     withArgumentsInArray: nil) {
    print("create table failed: (database.lastErrorMessage())")
}
//像数据库插入数据
if!database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", withArgumentsInArray: ["a", "b", "c"]) {
    print("insert 1 table failed: (database.lastErrorMessage())")
}
//另一种插入数据的方法
if !database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", withArgumentsInArray: ["e", "f", "g"]) {
    print("insert 2 table failed: (database.lastErrorMessage())")
}
//获取数据
if let rs = database.executeQuery("select x, y, z from test", withArgumentsInArray: 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)")
  }
} else {
    print("select failed: (database.lastErrorMessage())")
}
//关闭数据库
database.close()

好了 执行完后 我们可以自行打印 path 找到数据库文件路径
在命令行下执行 sqlite3 test.sqlite
执行 .table
会发现什么都没有
这就对了 证明我们的数据库已经加密了哈哈
如果是没有加密的 会显示刚才所创建的 test表
验证数据库是否加密 使用
hexdump -C plaintext.db

你可能感兴趣的:(swift 下使用fmdb 以及如何使用SQLCipher)