swift2使用sqlite数据库及常见错误总结(模拟机下)
0、效果图:
1、语言:swift2 2、工具:Xcode7.2 3、系统版本: MAC OS X 10.10.5 3、准备的材料: A、swift使用sqlite的代码封装文件,(这是我在github上找到的开源代码)我准备好了,传送门:这里。 B、sqlite图形化管理工具:SQLiteManager, 我也准备好了。传送门:来吧,点我。 4、用SQLiteManager新建sqlite数据库文件: A、打开可视化管理工具,按照下面的步骤创建数据库文件,当然,也可以用代码来创建表。这里,就不做介绍了。 B、该可视化管理工具还提供了查询的SQL语句。 C、关于该数据库文件存储路径,可以暂时存放在桌面或者你熟悉的地方。(这里没做好, 理论上应该把该数据库文件放到 .bandle文件中,统一管理的。)
5、创建swift工程 A、创建一个singleView的swift的工程。 B、拷贝数据库文件到创建的工程文件夹下。 C、把上面的swift操作sqlite的文件拷贝到已经创好的swift工程中。比如下面这样:
6、创建桥接文件
Build Settings -> Swift Complier -Code Generation。
接着刚刚创建的 .h文件,打开它,输入下面的内容即可。 #import "sqlite3.h" #import <time.h> 7、添加数据库驱动 Build Phases ->Link Binary With Libraries
8、设计界面 storyboard设计的效果如下: 通过辅助编辑器,把控件关联起来:
9、写代码了。 我实现的效果很简单,当程序启动的时候,读取数据库的内容,并显示出来。代码如下: import UIKit class ViewController: UIViewController { var db:SQLiteDB!; @IBOutlet weak var txtName: UITextField! @IBOutlet weak var txtVersion: UITextField! override func viewDidLoad() { super.viewDidLoad() db = SQLiteDB.sharedInstance(); initInfo(); //db.execute("create table if not exists MacInfo(name VARCHAR,version VARCHAR"); } /// 加载数据 func initInfo() { let data = db.query("SELECT rowid,* FROM "MacInfo""); if (0 > data.count) { /// 提示框 let alert = UIAlertController(title: "tips",message: "don't find",preferredStyle: UIAlertControllerStyle.Alert); let action = UIAlertAction(title:"sure",style: UIAlertActionStyle.Default,handler: nil); alert .addAction(action); presentViewController(alert,animated: true,completion: nil); return; } /// 显示数据 print(data.count-1); let user = data[data.count - 1]; txtName.text = user["name"] as? String; txtVersion.text = user["version"] as? String; } /// 保存到数据库 func saveInfo() { let name = txtName.text!; let version = txtVersion.text!; let result = db.execute("insert into MacInfo(name,version) values'(name)','(version)') "); print(result); } /// 保存按钮按下 @IBAction func saveBtnTouched(sender: UIButton) { saveInfo(); } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }10、编译 先别着急,还需要修改一个地方: SQLiteDB.swift 文件 接着,编译试试吧。会发现有个警告(没有修正该警告): 可以自己用UIAlertController代替UIAlertView在这里的用法。(这里,我不做修改,向下兼容)。关于UIAlertController的简单使用,比如下面这样: /// 提示框 let alertController = UIAlertController(title: "提示",message: "音乐没有开始播放",preferredStyle: UIAlertControllerStyle.Alert); let action = UIAlertAction(title: "OK",style: .Default,handler: nil); alertController.addAction(action); self.presentViewController(alertController,animated:true,completion:nil); 是不是没在程序启动的时候看到之前展示的效果图? 先看看这里输出的是什么:
报错信息如下: SQLiteDB - failed to copy writable version of DB! Error - The file “test.sqlite” couldn’t be opened because there is no such file. 11、做好数据库文件的配置: 前面,创建好了数据库文件,还没派上用场呢。 解决上面出错的方法: A、 打开Finder, 按快捷键:shift + command + G,将上面模拟器提示的路径copy上来,点击 “前往”,我的路径是: /Users/用户名/Library/Developer/CoreSimulator/Devices/3CA1FFF2-F868-4D3C-AA01-E4BEEEFBAC36/data/Containers/Data/Application/75DB3D7A-E63D-4655-AB2E-C91EEEC869B0/Documents/B、将创建好的数据库文件拷贝到该目录下,即可。 12 、重新编译,就达到了:程序启动,读取数据库指定表中得数据了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |