由于考虑将来还要开发Android版本app,为了移植方便,所以使用了sqlite3来做数据持久化,到时候把sql语句拷过去还能用。
1、 首先用xcode载入sqlite3类库
选择工程的TARGETS-build phases-link binary with libraries,点击“+”按钮,选择类库,点击“add”添加:
(输入sql查找:)
2、 sqlite3是 c语言写的类库,所以还要引用他的头文件。在工程里新建一个文件,类型为“.h”文件,命名为:ProjectSecretary2-Bridging-Header.h ,这个文件就是桥接文件,然后在这个文件里加一行代码:
#import "sqlite3.h"
3、 然后告诉xcode编译时要引入这个类库头文件
在targets->build settings ->Object-C Bridging Header 输入头文件名即可,要注意的是
- 找swift compiler时,要选择“ALL”和“Combined”,否则不好找。
- 输入文件名时可能要加上级文件路径,自己试试好了
4、 现在可以在代码里打开数据库了:
[objc] view plain copy
- let DBFILE_NAME = "psList.sqlite3"
- var db:COpaquePointer = nil
- //获取sqlite3数据库文件位置
- func applicationDocumentsDirectoryFile() ->String {
- let documentDirectory: NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
- let path = documentDirectory[0].stringByAppendingPathComponent(DBFILE_NAME) as String
- NSLog("path : %@", path)
- return path
- }
- //创建一个系统配置表
- func getSysConfig()->Dictionary<String,String>{
- var theResult:Dictionary<String,String>=Dictionary<String,String>()
- let writableDBPath = self.applicationDocumentsDirectoryFile()
- let cpath = writableDBPath.cStringUsingEncoding(NSUTF8StringEncoding)
- if sqlite3_open(cpath!, &db) != SQLITE_OK {
- sqlite3_close(db)
- assert(false, "数据库打开失败。")
- } else {
- //创建一个系统参数配置表,有3个字段,分别是 名字、值和备注
- let sql = "CREATE TABLE IF NOT EXISTS SysConfig (name TEXT PRIMARY KEY, value TEXT , comment TEXT)"
- let cSql = sql.cStringUsingEncoding(NSUTF8StringEncoding)
- if (sqlite3_exec(db,cSql!, nil, nil, nil) != SQLITE_OK) {
- sqlite3_close(db)
- assert(false, "建表失败。")
- }
- sqlite3_close(db)
- }
- return theResult
- }
请发表评论