在上一篇文章中游昼,給大家介紹了.plist,NSUserDefaults,NSKeyedArchiver桐汤,但是這三種方法都有一個致命的缺點瓣窄,那就是無法存儲大批量的數(shù)據(jù)厢呵,有性能的問題铆铆。
在iOS中有一下幾種存儲方式:
-
1.plist文件
-
2.NSUserDefaults(偏好設置\Preference)
-
3. NSCoding( NSKeyedArchiver\ NSkeyedUnarchiver)
-
4. SQLite3(3是版本號,是SQLite的第三個版本)
-
5.Core Data(core Data是對SQLite的封裝丹喻,因為iOS中使用的SQLite是純C語言的)
SQLite輕量級數(shù)據(jù)庫在移動應用中使用非常普遍薄货,但是目前的庫是C編寫的,為了方便使用碍论,對SQLite相關的操作用Swift進行了封裝谅猾。這個封裝代碼使用了一個開源項目SQLiteDB,地址是:https://github.com/fahimf/sqlitedb
下面來通過一個示例來簡單介紹一下SQLite的使用(包括創(chuàng)建表鳍悠,數(shù)據(jù)查詢税娜,插入數(shù)據(jù)等操作)
1.輸入用戶名和手機號,點擊保存藏研,將數(shù)據(jù)存儲到數(shù)據(jù)庫敬矩。
2.下次自動登錄,直接從數(shù)據(jù)庫載入初始化信息蠢挡。
![運行效果.png]
效果圖.png
步驟如下:
1. 在Build Phases -> Link Binary With Libraries中點擊加號弧岳,添加libsqlite3.0.tdb到項目中來
添加libsqlite3.0.tdb
2.創(chuàng)建連接頭文件Bridging-Header.h
#import "sqlite3.h"
#import <time.h>
3.在項目編譯屬性里引用頭文件
引入頭文件.png
4.導入SQLiteDB的代碼(SQLiteDB.swift、SQLTable.swift和String-Extras.swift)业踏,代碼結構如下:
導入SQLiteDB.png
5.開始創(chuàng)建:
//獲取數(shù)據(jù)庫實例
db = SQLiteDB.sharedInstance()
//如果表還不存在則創(chuàng)建表
db.execute("create table if not exists t_user(uid integer primary key,uname varchar(20),mobile varchar(20))")
從SQLite加載數(shù)據(jù):
func initUser() {
let data = db.query("select * from t_user")
if data.count > 0 {
//獲取最后一行數(shù)據(jù)顯示
let user = data[data.count - 1]
txtUname.text = user["uname"] as? String
txtMobile.text = user["mobile"] as? String
}
}
保存數(shù)據(jù)到SQLite
func saveUser() {
let uname = self.txtUname.text!
let mobile = self.txtMobile.text!
//插入數(shù)據(jù)庫禽炬,這里用到了esc字符編碼函數(shù),其實是調(diào)用bridge.m實現(xiàn)的
let sql = "insert into t_user(uname,mobile) values('\(uname)','\(mobile)')"
print("sql: \(sql)")
//通過封裝的方法執(zhí)行sql
let result = db.execute(sql)
print(result)
}
6.常見問題
報錯:
“SQLiteDB - failed to copy writable version of DB! Error - The file “data.db” couldn’t be opened because there is no such file.”
解決方案:
在 “工程” -> “Build Phases” -> “Copy Bundle Resources” 中把這個數(shù)據(jù)庫添加進來勤家。這樣才能將其隨同程序一起部署到手機上
設置.png
參考文章:http://www.hangge.com/blog/cache/detail_645.html
這一部分先整理到這里腹尖,歡迎大家來指出不足~( _ )/~~拜拜