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 }

 

 

你可能感兴趣的:(sqlite3)