class DataManager: NSObject {
//定义一个单例对象(类对象)
//系统中shareManager、defaultManager、standerdManager这一类获取的对象一般都是单例对象
static let shareManager = DataManager()
//定义管理数据库的对象
let fmdb:FMDatabase!
//线程锁,通过加锁和解锁来保证所做操作数据的安全性
let lock = NSLock()
//1.重写父类的构造方法
override init() {
//设置数据库的路径;fmdb.sqlite是由自己随意命名
let path = NSHomeDirectory().stringByAppendingString("/Documents/fmdb.sqlite")
//构造管理数据库的对象
fmdb = FMDatabase(path: path)
//判断数据库是否打开成功;如果打开失败则需要创建数据库
if !fmdb.open() {
print("数据库打开失败")
return
}
//创建数据库
//student表达表名,由自己命名
//userName,passWord是需要收藏的模型中的字段,须根模型中保持一致
//varchar表示字符串,integer表示数字,blob表示二进制数据NSData
let createSql = "create table if not exists student(userName varchar(1024),passWord varchar(1024))"
//执行sel语句进行数据库的创建
do {
try fmdb.executeUpdate(createSql, values: nil)
}catch {
print(fmdb.lastErrorMessage())
}
}
//2.增
func insertDataWith(model:StudentModel) {
//加锁操作
lock.lock()
//sel语句
//(?,?)表示需要传的值,对应前面出现几个字段,后面就有几个问号
let insetSql = "insert into student(userName, passWord) values(?,?)"
//更新数据库
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 = ?"
//更新数据库
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 = ?"
//更新数据库
do{
try fmdb.executeUpdate(updateSql, values: [model.userName!,model.passWord!])
}catch {
print(fmdb.lastErrorMessage())
}
//解锁
lock.unlock()
}
//5.判断数据库中是否有当前数据(查找一条数据)
func isHasDataInTable(model:StudentModel) -> Bool {
let isHas = "select * from student where userName = ?"
do{
let set = try fmdb.executeQuery(isHas, values: [model.userName!])
//查找当前行,如果数据存在,则接着查找下一行
if set.next() {
return true
}else {
return false
}
}catch {
print(fmdb.lastErrorMessage())
}
return true
}
//6.查找全部数据
func fetchAllData() ->[StudentModel] {
let fetchSql = "select * from student"
//用于承接所有数据的临时数组
var tempArray = [StudentModel]()
do {
let set = try fmdb.executeQuery(fetchSql, values: nil)
//循环遍历结果
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
}
}
网友评论