class DataManager: NSObject {
//定義一個單例對象(類對象)
//系統(tǒng)中shareManager泣特、defaultManager逾柿、standerdManager這一類獲取的對象一般都是單例對象
static let shareManager = DataManager()
//定義管理數(shù)據(jù)庫的對象
let fmdb:FMDatabase!
//線程鎖,通過加鎖和解鎖來保證所做操作數(shù)據(jù)的安全性
let lock = NSLock()
//1.重寫父類的構造方法
override init() {
//設置數(shù)據(jù)庫的路徑;fmdb.sqlite是由自己隨意命名
let path = NSHomeDirectory().stringByAppendingString("/Documents/fmdb.sqlite")
//構造管理數(shù)據(jù)庫的對象
fmdb = FMDatabase(path: path)
//判斷數(shù)據(jù)庫是否打開成功;如果打開失敗則需要創(chuàng)建數(shù)據(jù)庫
if !fmdb.open() {
print("數(shù)據(jù)庫打開失敗")
return
}
//創(chuàng)建數(shù)據(jù)庫
//student表達表名掐暮,由自己命名
//userName,passWord是需要收藏的模型中的字段泉瞻,須根模型中保持一致
//varchar表示字符串祭示,integer表示數(shù)字拍冠,blob表示二進制數(shù)據(jù)NSData
let createSql = "create table if not exists student(userName varchar(1024),passWord varchar(1024))"
//執(zhí)行sel語句進行數(shù)據(jù)庫的創(chuàng)建
do {
try fmdb.executeUpdate(createSql, values: nil)
}catch {
print(fmdb.lastErrorMessage())
}
}
//2.增
func insertDataWith(model:StudentModel) {
//加鎖操作
lock.lock()
//sel語句
//(?,?)表示需要傳的值贴妻,對應前面出現(xiàn)幾個字段,后面就有幾個問號
let insetSql = "insert into student(userName, passWord) values(?,?)"
//更新數(shù)據(jù)庫
do {
try fmdb.executeUpdate(insetSql, values: [model.userName!,model.passWord!])
}catch {
print(fmdb.lastErrorMessage())
}
//解鎖
lock.unlock()
}
//3.刪
func deleteDataWith(model:StudentModel) {
//加鎖操作
lock.lock()
//sel語句
//where表示需要刪除的對象的索引只磷,是對應的條件
let deleteSql = "delete from student where userName = ?"
//更新數(shù)據(jù)庫
do{
try fmdb.executeUpdate(deleteSql, values: [model.userName!])
}catch {
print(fmdb.lastErrorMessage())
}
//解鎖
lock.unlock()
}
//4.改
func updateDataWith(model:StudentModel,daraID:String) {
//加鎖
lock.lock()
//where id = ?中的id可傳可不傳
let updateSql = "update student set userName = ?,passWord = ? where id = ?"
//更新數(shù)據(jù)庫
do{
try fmdb.executeUpdate(updateSql, values: [model.userName!,model.passWord!])
}catch {
print(fmdb.lastErrorMessage())
}
//解鎖
lock.unlock()
}
//5.判斷數(shù)據(jù)庫中是否有當前數(shù)據(jù)(查找一條數(shù)據(jù))
func isHasDataInTable(model:StudentModel) -> Bool {
let isHas = "select * from student where userName = ?"
do{
let set = try fmdb.executeQuery(isHas, values: [model.userName!])
//查找當前行经磅,如果數(shù)據(jù)存在,則接著查找下一行
if set.next() {
return true
}else {
return false
}
}catch {
print(fmdb.lastErrorMessage())
}
return true
}
//6.查找全部數(shù)據(jù)
func fetchAllData() ->[StudentModel] {
let fetchSql = "select * from student"
//用于承接所有數(shù)據(jù)的臨時數(shù)組
var tempArray = [StudentModel]()
do {
let set = try fmdb.executeQuery(fetchSql, values: nil)
//循環(huán)遍歷結果
while set.next() {
let model = StudentModel()
//給字段賦值
model.userName = set.stringForColumn("userName")
model.passWord = set.stringForColumn("passWord")
tempArray.append(model)
}
}catch {
print(fmdb.lastErrorMessage())
}
return tempArray
}
}
swift中用FMDB封裝數(shù)據(jù)庫
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門鞠绰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腰埂,“玉大人飒焦,你說我怎么就攤上這事蜈膨。” “怎么了牺荠?”我有些...
- 文/不壞的土叔 我叫張陵翁巍,是天一觀的道長。 經(jīng)常有香客問我休雌,道長灶壶,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任杈曲,我火速辦了婚禮驰凛,結果婚禮上胸懈,老公的妹妹穿的比我還像新娘。我一直安慰自己恰响,他們只是感情好趣钱,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胚宦,像睡著了一般首有。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枢劝,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昨悼!你這毒婦竟也來了蝗锥?” 一聲冷哼從身側響起,我...
- 正文 年R本政府宣布渐夸,位于F島的核電站,受9級特大地震影響渔欢,放射性物質發(fā)生泄漏墓塌。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苫幢。 院中可真熱鬧访诱,春花似錦、人聲如沸韩肝。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽伞梯。三九已至玫氢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谜诫,已是汗流浹背漾峡。 一陣腳步聲響...
推薦閱讀更多精彩內容
- SQLManager.swift: 創(chuàng)建表的SQL語句放在單獨的文件db.sql中:
- FMDB使用 FMDB是iOS平臺的SQLite數(shù)據(jù)庫框架 FMDB以OC的方式封裝了SQLite的C語言API ...
- 上個版本為了增加用戶體驗乾戏,部分頁面集成了離線緩存數(shù)據(jù)功能,于是就在項目里使用了數(shù)據(jù)庫管理離線數(shù)據(jù)三热。下面交大家一步步...
- 一鼓择、FMDB使用 二、記得導入libaqlite3.0 三就漾、封裝 1呐能、創(chuàng)建單例工具類,繼承 FMDatabase2...
- 您需要先使用統(tǒng)計開放平臺的事件跟蹤功能后抑堡,才能設置Trackevent轉化摆出。 您可以為事件添加_trackEven...