iOS开发——数据持久化Swift篇&(三)SQLite3

SQLite3

使用

 1 //******************** 5.3 SQLite3存储和读取数据
 2     func use_SQLite3()
 3     {
 4         //声明一个Documents下的路径
 5         var dbPath = NSHomeDirectory() + "/Documents/SwiftClassDB.sqlite"
 6
 7         //判断数据库文件是否存在
 8         if !NSFileManager.defaultManager().fileExistsAtPath(dbPath)
 9         {
10             //获取安装包内数据库路径
11             var bundleDBPath:String? = NSBundle.mainBundle().pathForResource("SwiftClassDB", ofType: "sqlite")
12
13             //将安装包内数据库拷贝到Documents目录下
14             NSFileManager.defaultManager().copyItemAtPath(bundleDBPath!, toPath: dbPath, error: nil)
15         }
16
17         //打开数据库
18         let dbOperation = DatabaseOperations(dbPath: dbPath)
19
20         //添加一张表
21         dbOperation.createTable();
22
23         //插入一条信息, 通过Person对象来传值
24         let person:Person = Person(name: "刘明洋", pwd: "liumingyang", email: "[email protected]", age: 30)
25
26         dbOperation.addUser(person)
27
28         //查询
29         let personArray:[Person] = dbOperation.readAllUsers()
30         println("共搜索到:\(personArray.count) 条数据" )
31
32
33         //更新
34         dbOperation.updateUser("刘明洋", toName: "刘蕙通")
35
36
37         //删除
38         dbOperation.deleteUser("刘蕙通")
39
40         //关闭数据库
41         dbOperation.colseDb()
42
43
44
45     }
46
47
48     //******************** 5.4 Core Data
49     func use_CoreData()
50     {
51         //参见工程  LMYCoreData
52     }

数据操作

  1 class DatabaseOperations {
  2
  3
  4     //不透明指针,对应C语言里面的void *,这里指sqlite3指针
  5     private var db:COpaquePointer = nil
  6
  7
  8     //初始化方法打开数据库
  9     required init(dbPath:String)
 10     {
 11          println("db path:" + dbPath)
 12
 13         //String类的路径,转换成cString
 14         let cpath = dbPath.cStringUsingEncoding(NSUTF8StringEncoding)
 15
 16         //打开数据库
 17         let error = sqlite3_open(cpath!, &db)
 18
 19         //数据库打开失败处理
 20         if error != SQLITE_OK {
 21             sqlite3_close(db)
 22         }
 23     }
 24
 25
 26     deinit{
 27         self.colseDb()
 28     }
 29
 30
 31     //关闭数据库
 32     func colseDb(){
 33
 34         sqlite3_close(db)
 35     }
 36
 37
 38
 39     //代码创建表
 40     func createTable() -> Bool{
 41
 42         //sql语句
 43         var sql = "CREATE TABLE UserTable(id INTEGER PRIMARY KEY  AUTOINCREMENT NOT NULL, username TEXT NOT NULL, password TEXT NOT NULL, email TEXT, age INTEGER)"
 44
 45         //执行sql语句
 46         var execResult = sqlite3_exec(db, sql.cStringUsingEncoding(NSUTF8StringEncoding)!, nil, nil, nil);
 47
 48         //判断是否执行成功
 49         if (execResult != SQLITE_OK) {
 50             return false
 51         }
 52
 53         return true
 54     }
 55
 56     //插入一条信息
 57     func addUser(user: Person) -> Bool
 58     {
 59         //sql语句
 60         var sql = "INSERT INTO UserTable (username, password, email, age) VALUES (?, ?, ?, ?);";
 61         //sql语句转换成cString类型
 62
 63         var cSql = sql.cStringUsingEncoding(NSUTF8StringEncoding)
 64
 65         //sqlite3_stmt 指针
 66         var stmt:COpaquePointer = nil
 67
 68
 69         //1.编译sql
 70         let prepare_result = sqlite3_prepare_v2(self.db, cSql!, -1, &stmt, nil)
 71
 72         //判断如果失败,获取失败信息
 73         if prepare_result != SQLITE_OK {
 74             sqlite3_finalize(stmt)
 75             if let error = String.fromCString(sqlite3_errmsg(self.db)) {
 76                 let msg = "SQLiteDB - failed to prepare SQL: \(sql), Error: \(error)"
 77                 println(msg)
 78                 self.alert(msg)
 79             }
 80             return false
 81         }
 82
 83
 84         let intTran = UnsafeMutablePointer<Int>(bitPattern: -1)
 85         let tranPointer = COpaquePointer(intTran)
 86         let transient = CFunctionPointer<((UnsafeMutablePointer<()>) -> Void)>(tranPointer)
 87
 88         //2.bind 绑定参数
 89         //第2个参数:索引从1开始
 90         //最后一个参数为函数指针
 91         sqlite3_bind_text(stmt, 1, user.name!.cStringUsingEncoding(NSUTF8StringEncoding)!, -1, transient);
 92         sqlite3_bind_text(stmt, 2, user.password!.cStringUsingEncoding(NSUTF8StringEncoding)!, -1, transient);
 93         sqlite3_bind_text(stmt, 3, user.email!.cStringUsingEncoding(NSUTF8StringEncoding)!, -1, transient);
 94         sqlite3_bind_int(stmt, 4, CInt(user.age!));
 95
 96
 97         //3.step执行
 98         var step_result = sqlite3_step(stmt)
 99
100         //判断执行结果,如果失败,获取失败信息
101         if step_result != SQLITE_OK && step_result != SQLITE_DONE {
102             sqlite3_finalize(stmt)
103             if let err = String.fromCString(sqlite3_errmsg(self.db)) {
104                 let msg = "SQLiteDB - failed to execute SQL: \(sql), Error: \(err)"
105                 println(msg)
106                 self.alert(msg)
107             }
108             return false
109         }
110
111         //4.finalize
112         sqlite3_finalize(stmt);
113
114         return true
115     }
116
117     //查询
118     func readAllUsers() -> [Person]{
119
120         //声明一个Person对象数组(查询的信息会添加到该数组)
121         var usersArr = [Person]()
122
123         //查询sql语句
124         var sql = "SELECT * FROM UserTable;";
125
126         //sqlite3_stmt 指针
127         var stmt:COpaquePointer = nil
128         var cSql = sql.cStringUsingEncoding(NSUTF8StringEncoding)
129
130         //1.编译sql
131         let prepare_result = sqlite3_prepare_v2(self.db, cSql!, -1, &stmt, nil)
132         if prepare_result != SQLITE_OK {
133             sqlite3_finalize(stmt)
134             if let error = String.fromCString(sqlite3_errmsg(self.db)) {
135                 let msg = "SQLiteDB - failed to prepare SQL: \(sql), Error: \(error)"
136                 println(msg)
137                 self.alert(msg)
138             }
139             return usersArr
140         }
141
142         //2.step
143         while (sqlite3_step(stmt) == SQLITE_ROW) {
144             var user = Person()
145
146             //循环 从数据库获取数据,添加到数组中
147             let cName = UnsafePointer<CChar>(sqlite3_column_text(stmt, 0))
148             let cPwd = UnsafePointer<CChar>(sqlite3_column_text(stmt, 1))
149             let cEmail = UnsafePointer<CChar>(sqlite3_column_text(stmt, 2))
150             let cAge = sqlite3_column_int(stmt, 3)
151
152             user.name = String.fromCString(cName)
153             user.password = String.fromCString(cPwd)
154             user.email = String.fromCString(cEmail)
155             user.age = Int(cAge)
156
157             usersArr += [user]
158         }
159
160         //3.finalize
161         sqlite3_finalize(stmt);
162
163         return usersArr
164     }
165
166     //更新一条信息
167     func updateUser(name: String , toName:String) -> Bool
168     {
169         //更新sql语句
170         var sql = "update UserTable set username = ‘\(toName)‘ where username = ‘\(name)‘";
171
172         //sqlite3_stmt 指针
173         var stmt:COpaquePointer = nil
174         var cSql = sql.cStringUsingEncoding(NSUTF8StringEncoding)
175
176         //1.编译sql
177         let prepare_result = sqlite3_prepare_v2(self.db, cSql!, -1, &stmt, nil)
178
179         //判断如果失败,获取失败信息
180         if prepare_result != SQLITE_OK {
181             sqlite3_finalize(stmt)
182             if let error = String.fromCString(sqlite3_errmsg(self.db)) {
183                 let msg = "SQLiteDB - failed to prepare SQL: \(sql), Error: \(error)"
184                 println(msg)
185                 self.alert(msg)
186             }
187             return false
188         }
189
190         //3.step执行
191         var step_result = sqlite3_step(stmt)
192
193         //判断执行结果,如果失败,获取失败信息
194         if step_result != SQLITE_OK && step_result != SQLITE_DONE {
195             sqlite3_finalize(stmt)
196             if let err = String.fromCString(sqlite3_errmsg(self.db)) {
197                 let msg = "SQLiteDB - failed to execute SQL: \(sql), Error: \(err)"
198                 println(msg)
199                 self.alert(msg)
200             }
201             return false
202         }
203
204         //4.finalize
205         sqlite3_finalize(stmt);
206
207         return true
208     }
209
210
211     //删除一条信息
212     func deleteUser(username: String) -> Bool
213     {
214         //删除sql语句
215         var sql = "delete from UserTable  where username = ‘\(username)‘";
216
217         //sqlite3_stmt 指针
218         var stmt:COpaquePointer = nil
219         var cSql = sql.cStringUsingEncoding(NSUTF8StringEncoding)
220
221         //1.编译sql
222         let prepare_result = sqlite3_prepare_v2(self.db, cSql!, -1, &stmt, nil)
223
224         //判断如果失败,获取失败信息
225         if prepare_result != SQLITE_OK {
226             sqlite3_finalize(stmt)
227             if let error = String.fromCString(sqlite3_errmsg(self.db)) {
228                 let msg = "SQLiteDB - failed to prepare SQL: \(sql), Error: \(error)"
229                 println(msg)
230                 self.alert(msg)
231             }
232             return false
233         }
234
235         //3.step执行
236         var step_result = sqlite3_step(stmt)
237
238         //判断执行结果,如果失败,获取失败信息
239         if step_result != SQLITE_OK && step_result != SQLITE_DONE {
240             sqlite3_finalize(stmt)
241             if let err = String.fromCString(sqlite3_errmsg(self.db)) {
242                 let msg = "SQLiteDB - failed to execute SQL: \(sql), Error: \(err)"
243                 println(msg)
244                 self.alert(msg)
245             }
246             return false
247         }
248
249         //4.finalize
250         sqlite3_finalize(stmt);
251
252         return true
253     }
254
255
256
257
258     //定义一个报警器
259     func alert(msg:String) {
260         dispatch_async(dispatch_get_main_queue()) {
261             let alert = UIAlertView(title: "SQLiteDB", message:msg, delegate: nil, cancelButtonTitle: "OK")
262             alert.show()
263         }
264     }
265 }
时间: 2024-08-26 03:48:16

iOS开发——数据持久化Swift篇&(三)SQLite3的相关文章

iOS开发——数据持久化Swift篇&amp;SettingBundle

SettingBundle 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 var userDefault = NSUserDefaults.standardUserDefaults() 6 7 @IBOutlet weak var textField: UITextField! 8 9 @IBAction func btnSave(sender: UIButton) { 10 updateUserDefaults(

iOS开发——数据持久化Swift篇&amp;iCloud云存储

iCloud云存储 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 /** 8 1:可以存储两种 9 //IOS可识别的文档 10 11 //字典对象 12 */ 13 14 // 2: Ubiquity Container............数据区域 15 16 17 /** 18 3: 19 分成多个文

iOS开发——数据持久化Swift篇&amp;通用文件存储

通用文件存储 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 @IBOutlet weak var textField: UITextField! 6 7 @IBAction func btnSave(sender: UIButton) { 8 var text = textField.text as NSString 9 10 //写入文件(可序列化) 11 text.writeToFile(getPath("da

iOS开发——数据持久化Swift篇&amp;(一)NSUserDefault

NSUserDefault 1 2 //******************** 5.1 NSUserDefault和对象归档 3 func useNSUserDefault() 4 { 5 //通过单利来创建一个NSUserDefaults对象,全局变量NSUserDefault,可在整个项目传递变量 6 var userDefault:NSUserDefaults = NSUserDefaults.standardUserDefaults() 7 8 //通过init方法创建 9 var u

iOS开发——数据持久化Swift篇&amp;模型对象归档

模型对象归档 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 6 7 @IBOutlet weak var textField: UITextField! 8 9 @IBAction func btnSave(sender: UIButton) { 10 var text = textField.text as NSString 11 var image = UIImage(named: "log") 12

iOS开发——数据持久化Swift篇&amp;(二)沙盒文件

沙盒文件 1 //******************** 5.2 文件操作 2 func use_FileOperations() 3 { 4 //1.获取程序的Home目录 5 let homeDirectory = NSHomeDirectory() 6 println(homeDirectory) 7 8 9 //2.获取Documents目录 10 let documentPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathD

iOS开发——数据持久化OC篇&amp;(三)对象归档

归档 iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息) 归档:因为前两者都有一个致命的缺陷,只能存储常用的类型.归档可以实现把自定义的对象存放在文件中. 二.代码示例 1.文件结构 2.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 /

iOS开发——数据持久化OC篇&amp;(五)SQLite3详解

SQLite3详解 SQLite是嵌入式的和轻量级的SQL数据库.SQLite是由C实现的.广泛用于包括浏览器(支持HTML5的大部分浏览器,IE除外).iOS.Android以及一些便携需求的小型web应用系统. 1 使用原因:存储.检索信息 2 SQLite是MySQL精简版.但无需服务器就能进行. 3 两个限制:1)必须手动创建数据库 2)没有面向对象的接口. 4 如何手动创建数据库. 使用SQLite前的准备 使用SQLite是很多做iOS开发中第一次面对C的情况,包括我.因为SQLit

iOS开发——数据持久化OC篇&amp;总结

数据持久化总结 1 //1.沙盒:/Users/nono/Library/Application Support/iPhone Simulator/5.1/Applications/2D135859-1E80-4754-B36D-34A53C521DE3 2 /** 3 // 1.获取程序的Home目录 4 NSString *home = NSHomeDirectory(); 5 NSLog(@"应用程序目录:%@", home); 6 7 // 2.获取Documents目录 8