基于Swift使用FMDB实现(增删改查+搜索+聊天置顶+分页读取)
来源:互联网 发布:平方c语言 编辑:程序博客网 时间:2024/05/17 15:40
Pod
引入FMDB
框架(记得加use_frameworks!
),引入头文件import FMDB
写一个DBManager类
class DBManager: NSObject { static let shareManager = DBManager() var dbQueue: FMDatabaseQueue? func openDB() { let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first let userPath = documentDirectory?.stringByAppendingPathComponent(path: "data10001") if !FileManager.default.fileExists(atPath: userPath!) { guard ((try? FileManager.default.createDirectory(atPath: userPath!, withIntermediateDirectories: false, attributes: nil)) != nil) else { return } } let fileName = userPath?.stringByAppendingPathComponent(path: "person.db") dbQueue = FMDatabaseQueue(path: fileName) }}extension String { //给String扩展一个stringByAppendingPathComponent方法 func stringByAppendingPathComponent(path: String) -> String { let nsString = self as NSString return nsString.appendingPathComponent(path) }}
每一张表写一个DAO(Data Access Object),写sql语句操作数据库,暴露接口,例如TABLE_LIST
表的ListDAO
的部分代码
/// 单例static let shareDAO = ListDAO()/// 创建表func creatTable() { let sqlString = "CREATE TABLE IF NOT EXISTS TABLE_LIST('personId' Integer Integer PRIMARY KEY NOT NULL, 'name' Text, 'isTop' Integer)" //字段的单引号可有可没有,添加主键防止重复添加 DBManager.shareManager.dbQueue?.inDatabase({ (db) in guard (db?.executeUpdate(sqlString, withArgumentsIn: [])) != nil else { return } })}/// 删除表func dropTable() { let sqlString = "DROP TABLE TABLE_LIST" DBManager.shareManager.dbQueue?.inDatabase({ (db) in guard (db?.executeUpdate(sqlString, withArgumentsIn: [])) != nil else { return } })}/// 插入数据func insertData(model: ListModel) { let sqlString = "INSERT OR REPLACE INTO TABLE_LIST(personId, name, isTop) values (?,?,?)" DBManager.shareManager.dbQueue?.inDatabase({ (db) in guard (db?.executeUpdate(sqlString, withArgumentsIn: [model.personId, model.name, model.isTop]))! else { return } })}/// 获取数据(已经置顶)func getDataList() -> Array<ListModel> { var resultArray = Array<Any>() DBManager.shareManager.dbQueue?.inDatabase({ (db) in //无条件全量查找 //let sqlString = "SELECT * FROM TABLE_LIST"; //根据isTop字段降序输出 let sqlString = "SELECT * FROM TABLE_LIST ORDER BY isTop DESC"; guard let set = try? db?.executeQuery(sqlString, values: []) else { return } while (set?.next())! { let model = ListModel() model.personId = Int((set?.int(forColumn: "personId"))!) model.name = set?.string(forColumn: "name") model.isTop = (set?.bool(forColumn: "isTop"))! resultArray.append(model) } set?.close() }) return resultArray as! Array<ListModel>}/// 删除单条数据func deleteDataOfDataList(personId: Int) -> Bool { var result: Bool = false DBManager.shareManager.dbQueue?.inDatabase({ (db) in let sqlString = "DELETE FROM TABLE_LIST WHERE personId = ?" result = (db?.executeUpdate(sqlString, withArgumentsIn: [personId]))! }) return result}/// 置顶操作func setTopWithPersonId(personId: Int, isTop: Bool) -> Bool { var result: Bool = false DBManager.shareManager.dbQueue?.inDatabase({ (db) in let sqlString = "UPDATE TABLE_LIST SET isTop = ? WHERE personId = ?" result = (db?.executeUpdate(sqlString, withArgumentsIn: [isTop,personId]))! }) return result}
TABLE_DETAIL
表的DetailDAO
的部分代码
/// 查询数据(全量获取)func getDataListWithString(string: String) -> Array<Any> { var resultArray = Array<Any>() DBManager.shareManager.dbQueue?.inDatabase({ (db) in // LIKE '%Java%'查询des字段中包含Java的, LIKE 'Java*' 查询以Java开头的, '*Java查询以Java结尾的' // 查询 TABLE_DETAIL 表中包含string的model let sqlString = "SELECT * FROM TABLE_DETAIL WHERE des LIKE '%" + string + "%'" guard let set = try? db?.executeQuery(sqlString, values: []) else { return } while (set?.next())! { let model = DetailModel() model.desId = Int((set?.int(forColumn: "desId"))!) model.des = set?.string(forColumn: "des") resultArray.append(model) } set?.close() }) return resultArray}/// 分页获取数据(分页读取,每次20条)func pageReadDataListWith(page: Int) -> Array<Any> { var resultArray = Array<Any>() DBManager.shareManager.dbQueue?.inDatabase({ (db) in var sqlString = String() if page != 1 { // TABLE_DETAIL AS TD: 为TABLE_DETAIL起个别名TD // TD.desId>\(page * 20): 查询TD.desId大于当前的数据 // ORDER BY TD.desId ASC: 根据TD.desId升序 // LIMIT 0,20: 每次获取20条数据 sqlString = "SELECT * FROM TABLE_DETAIL AS TD WHERE TD.desId>\(page * 20) ORDER BY TD.desId ASC LIMIT 0,20" } else { // ASC 升序(默认) DESC 降序 sqlString = "SELECT * FROM TABLE_DETAIL AS TD ORDER BY TD.desId ASC LIMIT 1,20" } guard let set = try? db?.executeQuery(sqlString, values: []) else { return } while (set?.next())! { let model = DetailModel() model.desId = Int((set?.int(forColumn: "desId"))!) model.des = set?.string(forColumn: "des") resultArray.append(model) } set?.close() }) return resultArray}
DEMO效果
DEMO地址
0 1
- 基于Swift使用FMDB实现(增删改查+搜索+聊天置顶+分页读取)
- swift使用FMDB数据库增删改查
- 使用FMDB对数据库实现增删查改
- iOS FMDB数据库实现增删改查
- FMDB增删改查
- FMDB简介以及使用增删改查
- FMDB增删改查的使用
- ThinkPHP增删改查 搜索 分页
- yii增删改查搜索分页
- swift中使用CoreData实现增删查改
- FMDB的增删改查
- fmdb实现sqlite数据库的增删改查功能(上)
- fmdb实现sqlite数据库的增删改查功能(下)
- iOS-FMDB的简单使用-增删改查
- 基于XML配置实现增删改查
- ios FMDB的增删查改
- iOS FMDB数据库的增删改查
- FMDB创建数据库的增删改查
- 算法训练 表达式计算
- android之ExpandableListView
- Android 学习资源
- poj2356 抽屉原理
- Linux基础命令1
- 基于Swift使用FMDB实现(增删改查+搜索+聊天置顶+分页读取)
- Django学习笔记
- java代码操作cmd二次运行新java程序
- Unity学习日记
- 安装MySQL总出现3534错误,也许你可以试试用cmd打开
- c#中访问修饰符和声明修饰符
- 算法提高 统计单词数
- 算法题-素数求和
- ACM递推递归练习H三国佚事——巴蜀之危