Swift 中使用 SQLite——創建數據表

這是Swift 中使用 SQLite系列文章的第二篇,本文主要介紹一下如何創建數據表,首先提示一下:

  • 如果是第一次運行,打開數據庫之後,只能得到一個空的數據,沒有任何的數據表
  • 爲了讓數據庫正常使用,在第一次打開數據庫後,需要執行 創表 操作
  • 注意:創表操作本質上是通過執行 SQL 語句實現的

代碼實現

  • 執行 SQL 語句函數
/// 執行 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 語句直接創建數據表
/// 創建數據表
///
/// - 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 函數
if createTable() {
    print("創建數據表成功")
} else {
    print("創建數據表失敗")
}

小結

  • 創表 SQL 可以從 Navicat 中粘貼,然後做一些處理
    • 將 " 替換成 '
    • 在每一行後面增加一個 \n 防止字符串拼接因爲缺少空格造成 SQL 語句錯誤
    • 在 表名 前添加 IF NOT EXISTS 防止因爲數據表存在出現錯誤

通過 SQL 文件直接創表

  • 在 Xcode 中建立 db.sql 文件
  • 將 Navicat 中的 DDL 創表文件粘貼到 db.sql 中
    • 每個表名前添加 IF NOT EXISTS 防止因爲數據表存在出現錯誤
    • 每段 SQL 末尾添加 ;
    • 使用 -- 描述信息 增加數據表備註
-- 創建個人信息表
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 函數
/// 創建數據表 - 從 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 簡單加密

  • 在終端輸入以下命令
$ base64 db.sql -o db64.txt
  • 將 db64.txt 拖拽到項目中
  • 新建以下函數,先解碼再執行
/// 加載 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)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章