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
}
}
swift中用FMDB封装数据库
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- FMDB使用 FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API ...
- 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线数据。下面交大家一步步...
- 一、FMDB使用 二、记得导入libaqlite3.0 三、封装 1、创建单例工具类,继承 FMDatabase2...
- 您需要先使用统计开放平台的事件跟踪功能后,才能设置Trackevent转化。 您可以为事件添加_trackEven...