iOS swift sqlite使用,上传及定时更新
来源:互联网 发布:linux服务器访问外网 编辑:程序博客网 时间:2024/06/11 15:36
为什么要这么做?
本地做的时候,直接在沙盒缓存.没有问题.当上传代码时,数据库文件不存在,别人使用时,从沙盒读取不到数据库中的数据,导致系统崩溃等问题
方案一: (此处代码全部为swift代码)
1. 先手动创建数据库并添加数据,
代码:(部分代码,此处为数据库的路径代码.这里路径随便写,写到沙盒中,创建数据库成功并添加完数据即可) let path:String = NSHomeDirectory().stringByAppendingString("/Documents/Data.db") print(path) lock = NSLock() dataBase = FMDatabase(path:path) creatTable() print(path)
2.创建好后拖拽到工程中
3.修改本地代码(把之前的数据库路径(即第一步代码)删除,修改为本步骤的代码):
1) 数据库路径: 首先定义到沙盒中,在Document中新建文件夹(xxx),创建数据库文件(xxx.db) 2)这时,路径肯定不存在.从工程中把数据库文件复制到新建的文件夹中代码: func openDB(){ let fileManager = NSFileManager.defaultManager() var isFile = false; //从这里开始判断有没有数据库文件 let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first; let path = documentDirectory?.stringByAppendingString("/ZhuLuoXi") //文件夹的沙盒路径 let isDirExist = fileManager.fileExistsAtPath(path!) //如果文件夹没有,则创建文件夹 if !isDirExist{ do { try fileManager.createDirectoryAtPath(path!, withIntermediateDirectories: true, attributes: nil) } catch let error as NSError { print("Error: \(error.domain)") } } //数据库文件路径 let dbFilePath = path?.stringByAppendingString("/ZhuLuoXi.db") //判断数据库路径存不存在,如果存在,通过路径创建dataBase(第一次使用路径肯定不存在,则执行下面代码,从工程中拷贝一份数据库文件到沙盒中,确保路径存在) if fileManager.fileExistsAtPath(dbFilePath!) { isFile = true } //如果数据库路径不存在,从工程中拷贝一份数据库文件到沙盒中,路径就会存在 if isFile == false{ let dbPath = NSBundle.mainBundle().pathForResource("ZhuLuoXi", ofType: "db"); do{ try fileManager.copyItemAtPath(dbPath!, toPath: dbFilePath!) }catch let error as NSError{ print("Error: \(error.domain)") } } //通过路径初始化dataBase self.dataBase = FMDatabase(path: dbFilePath) print("数据库路径--------------------\(dbFilePath)") self.creatTable()}
代码写到这时,多人合作,上传代码,他人使用时,数据库就不会出现问题.
代码的思路为:手动本地创建数据库,添加完数据后拖拽到工程中. 使用时,数据库路径为定义在沙盒路径中,如果没有数据库文件(第一次肯定没有),从工程中拷贝一份到沙盒中.
4.定时更新数据库: 数据库中的文件如果会发生变化,则需要定期更新
代码: //是否更新数据库,这里设置为30天更新一次func isUpdateDBManager()->Bool{ var isUpdate = false let date = NSDate() let updateTime = NSUserDefaults.standardUserDefaults().valueForKey("_updateDBManager") as? Double if updateTime < 1000.0 || (updateTime! + 30 * 24 * 60 * 60) < (date.timeIntervalSince1970){ isUpdate = true } return isUpdate}//更新数据(这里为更新两张表), //有个缺陷是表的自增id不会从1开始排序func updataDB(){ if isUpdateDBManager() == false{ return } //插入区县数据 deleteList("delete from countyTable") //插入之前先删除 CountyModel.loadCountyList { (countyModels) -> () in for county in countyModels!{ print(countyModels?.count) let sql = "insert into countyTable(county_id,name,code,city_id,post_code,lng,lat) values (?,?,?,?,?,?,?)" self.insert(sql, param:[county.county_id!,county.name!,county.code!,county.city_id!,county.post_code!,county.lng!,county.lat!]) } } // 插入市数据 deleteList("delete from cityTable") //插入之前先删除 CityModel.loadCityList { (cityModels) -> () in for city in cityModels!{ let sql = "insert into cityTable(city_id,name,province_id,code,lng,lat) values (?, ?,?,?,?,?)" self.insert(sql, param: [city.city_id!,city.name!,city.province_id!,city.code!,city.lng!,city.lat!]) } }}
方案二:
大体思路为: 定义标示符,判断是否是第一次创建数据库 如果是第一次创建数据库,则直接创建数据库,添加数据,存入沙盒.并且不执行定时更新的代码 如果不是第一次创建数据库,则执行更新代码.每次从沙盒中读取数据库内容
0 0
- iOS swift sqlite使用,上传及定时更新
- Swift IOS原生SQLite库的使用
- Swift 中使用 SQLite——批量更新(事务处理)
- Swift 中使用 SQLite——批量更新(事务处理)
- iOS程序打包上传及新版本更新
- Sqlite 数据库更新 iOS
- ios 常见错误及解决办法(不定时更新)
- 用Swift实现iOS相机及相册图片上传
- sqlite的安装移植及使用,持续更新吧
- IOS开发Swift使用NSURLSessionUploadTask实现后台上传功能
- [iOS]-Swift使用易错点整理(持续更新)
- SQLite在swift中的使用
- (十一)swift 使用SQLite
- SQLite数据库基本使用(swift)
- Swift使用FMDB操作SQLite
- [iOS][更新]iOS开发数据库操作之SQLite及Mysql操作实例
- iOS --- 分别使用NSTimer及setKeepAliveTimeout来实现定时任务
- 使用Handler定时更新UI
- LeetCode #237 Delete Node in a Linked List
- 遍历新姿势
- opencv(2)
- hdoj 5616 Jam's balance 【母函数】
- 【Android】【笔记】《Android 入门经典》part 13 网络通信技术
- iOS swift sqlite使用,上传及定时更新
- C内存管理
- SACK信息
- 【Android】【笔记】《Android 入门经典》part 14 Service
- Codefroces 618D Hamiltonian Spanning Tree 树型动规
- TCP显示冲突通告(ECN)
- 集训队专题(2)1007 Evolution
- 【NYOJ】[463]九九乘法表
- JFinal+WebUploader实现图片的异步上传