您的位置:首页 > 移动开发 > Swift

Swift 中使用 SQLite——创建数据表

2016-03-16 00:43 411 查看
这是Swift 中使用 SQLite系列文章的第二篇,本文主要介绍一下如何创建数据表,首先提示一下:

如果是第一次运行,打开数据库之后,只能得到一个空的数据,没有任何的数据表

为了让数据库正常使用,在第一次打开数据库后,需要执行
创表
操作

注意:创表操作本质上是通过执行
SQL
语句实现的

代码实现

执行
SQL
语句函数

[code]/// 执行 SQL
///
/// - parameter sql: SQL
///
/// - returns: 是否成功
func execSQL(sql: String) -> Bool {
    /**
        参数
        1. 数据库句柄
        2. 要执行的 SQL 语句
        3. 执行完成后的回调,通常为 nil
        4. 回调函数第一个参数的地址,通常为 nil
        5. 错误信息地址,通常为 nil
    */
    return sqlite3_exec(db, sql, nil, nil, nil) == SQLITE_OK
}

通过 SQL 语句创建数据表

通过 SQL 语句直接创建数据表

[code]/// 创建数据表
///
/// - returns: 是否成功
private func createTable() -> Bool {
    // 1. 准备 SQL
    let sql = "CREATE TABLE IF NOT EXISTS 'T_Person' ( \n" +
    "'id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \n" +
    "'name' TEXT, \n" +
    "'age' INTEGER, \n" +
    "'height' REAL \n" +
    ");"

    // 2. 返回执行 SQL 的结果
    return execSQL(sql)
}


调整
openDB
函数

[code]if createTable() {
    print("创建数据表成功")
} else {
    print("创建数据表失败")
}

小结

创表
SQL
可以从
Navicat
中粘贴,然后做一些处理

"
替换成
'

在每一行后面增加一个
\n
防止字符串拼接因为缺少空格造成
SQL
语句错误
表名
前添加
IF NOT EXISTS
防止因为数据表存在出现错误

通过 SQL 文件直接创表

在 Xcode 中建立
db.sql
文件
将 Navicat 中的 DDL 创表文件粘贴到 db.sql 中

每个表名前添加
IF NOT EXISTS
防止因为数据表存在出现错误
每段 SQL 末尾添加
;

使用
-- 描述信息
增加数据表备注

[code]-- 创建个人信息表
CREATE TABLE IF NOT EXISTS "T_Person" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT,
"age" INTEGER,
"height" REAL
);

-- 创建图书表
CREATE TABLE IF NOT EXISTS "T_Books" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT
);


修改
createTable
函数

[code]/// 创建数据表 - 从 bundle 加载并执行 db.sql
///
/// - returns: 是否成功
private func createTable() -> Bool {
    // 1. 准备 SQL
    let path = NSBundle.mainBundle().pathForResource("db.sql", ofType: nil)!
    guard let sql = try? NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) else {
        print("加载 SQL 失败")
        return false
    }

    // 2. 执行 SQL
    return execSQL(sql as String)
}

小结

通过 sql 脚本创建数据表的方式灵活性更大,被广泛应用在商业应用中
如果要保护数据安全,可以对 sql 脚本进行一些简单的加密处理

base 64 简单加密

在终端输入以下命令

[code]$ base64 db.sql -o db64.txt


将 db64.txt 拖拽到项目中
新建以下函数,先解码再执行

[code]/// 加载 base64 编码后的 SQL
/// 
/// 提示:
///     - BASE64 编码
///         $ base64 db.sql -o db64.txt
///     - BASE64 解码
///         $ base64 db64.txt -D -o db.sql
/// - returns: 是否成功
private func createTable3() -> Bool {
    // 1. 准备 SQL
    let path = NSBundle.mainBundle().pathForResource("db64.txt", ofType: nil)!
    let base64 = try! String(contentsOfFile: path)
    let data = NSData(base64EncodedString: base64, options: [.IgnoreUnknownCharacters])!

    // base64 解码
    let sql = NSString(data: data, encoding: NSUTF8StringEncoding)! as String

    // 2. 执行 SQL
    return execSQL(sql)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: