SQLite的
說起 SQLite,它和你熟知的 MySQL 一樣,都是關係型數據庫管理系統,但與後者不同的地方在於,它完全不需要對應的獨立服務器!
一般說起來,SQLite 都是以文件的形式存在,大多用在應用的內嵌儲存裡。通過在應用代碼裡加載 SQLite 庫,就可以很方便地直接存取 SQLite 文件裡的數據了。
SQLite 由 C 編寫,所以你懂的,要調用它的庫,一定也是 C 語言,什麼指針啦……
要訪問 SQLite 數據庫裡的數據——畢竟還是數據庫,所以你只需要像訪問其他數據庫一樣,在程序內使用 SQL 即可。
FMDB
當然了,雖然 Swift 本身也可以橋接 C 語言來使用 SQLite 庫,但這樣太麻煩了,尤其 C 不是 OOP ,你可能一下子用起來也不習慣,這裡我們介紹最流行的第三方庫:FMDB (飛肉庫)。
它把 SQLite 庫的所有功能用 OC 封裝,這樣我們用起來就方便多了。得益於 Xcode 的高能,我們可以直接全自動地把 FMDB 的 OC 代碼橋接為 Swift 。
導入代碼
從 Github 下載 FMDB 項目文件之後,到它的 SRC 目錄中,將所有的 .H 和 .米 文件(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