本文将演示使用开源类库对sqlite数据库进行高效 *** 作。
首先确保在项目中已经安装了所需的第三方库。
点击【Podfile】,查看安装配置文件。
1 platform :ios,‘12.0’2 use_frameworks!3 4 target ‘DemoApp‘ do5 source ‘https://github.com/CocoaPods/Specs.git‘6 pod ‘sqlite.swift‘7 end
根据配置文件中的相关配置,安装第三方库。
在项目导航区,打开视图控制器的代码文件【VIEwController.swift】
依次实现数据库和数据表的创建,以及常见的增、删、改、查等数据库 *** 作。
1 import UIKit 2 //引入已经安装的第三方类库 3 import sqlite 4 5 class VIEwController: UIVIEwController { 6 7 overrIDe func vIEwDIDLoad() { 8 super.vIEwDIDLoad() 9 // Do any additional setup after loading the vIEw,typically from a nib. 10 //创建数据库和数据表。 11 createtable() 12 //往数据表中插入几条数据 13 insertData() 14 //对数据进行检索 *** 作 15 findRecords() 16 //往数据表中插入几条数据 17 findRecords() 18 //对数据进行检索和更新 *** 作 19 filterandUpdateRecords() 20 //对数据进行删除 *** 作。 21 deleteRecords() 22 //执行SQL语句。 23 executesql() 24 } 25 26 //添加一个方法,用来创建数据库和数据表。 27 func createtable() 28 { 29 //添加一个异常捕捉语句,用来创建数据库和数据表。 30 do 31 { 32 //初始化一个沙箱中的文件路径,作为数据库保存的位置。 33 let path = NSHomeDirectory() + "/documents/db.sqlite3" 34 print(path) 35 36 //根据数据库的路径,初始化一个数据库连接对象。 37 let db = try Connection(path) 38 39 //初始化一个指定名称的数据表 40 let users = table("users") 41 //初始化一个整形常量,作为数据表中的ID字段。 42 let ID = Expression<Int64>("ID") 43 //初始化一个整形常量,作为数据表中的name字段。 44 let name = Expression<String?>("name") 45 //初始化一个整形常量,作为数据表中的email字段。 46 let email = Expression<String>("email") 47 48 //通过调用数据库连接对象的执行命令,创建一张新的数据表。 49 try db.run(users.create { t in 50 //往数据表中添加一个字段,并设置该字段为数据表的主键。 51 t.column(ID,primaryKey: true) 52 //将name字段也添加到数据表中 53 t.column(name) 54 //将email字段也添加到数据表中, 55 //并设置邮箱字段中的数据具有唯一性。 56 t.column(email,unique: true) 57 }) 58 } 59 catch 60 { 61 print("Something went wrong :(") 62 } 63 } 64 65 //添加一个方法,往数据表中插入几条数据。 66 func insertData() 67 { 68 //添加一个异常捕捉语句,用来执行数据的插入 *** 作。 69 do 70 { 71 //初始化一个字符串常量,作为数据库文件所在的路径。 72 let path = NSHomeDirectory() + "/documents/db.sqlite3" 73 //创建数据库连接对象 74 let db = try Connection(path) 75 76 //创建一个数据表对象 77 let users = table("users") 78 //初始化两个字段,分别表示名称字段和邮箱字段。 79 let name = Expression<String?>("name") 80 let email = Expression<String>("email") 81 82 //往数据表中插入一条记录, 83 //并设置这条记录的两个字段的值。 84 let insert = users.insert(name <- "Alice",email <- "[email protected]") 85 //通过调用数据库连接对象的执行命令,执行数据表插入语句。 86 //并获得返回的记录的唯一标识符。 87 let rowID = try db.run(insert) 88 //在控制台输出记录的唯一标识符。 89 print(">>>>>>>>>>>\(rowID)") 90 } 91 catch 92 { 93 print("Something went wrong :(") 94 } 95 } 96 97 //添加一个方法,对数据进行检索 *** 作 98 func findRecords() 99 {100 //添加一个异常捕捉语句,对数据进行检索 *** 作101 do102 {103 //初始化一个字符串常量,作为数据库文件所在的路径。104 let path = NSHomeDirectory() + "/documents/db.sqlite3"105 //创建数据库连接对象106 let db = try Connection(path)107 //创建一个数据表对象108 let users = table("users")109 110 //初始化三个字段常量111 let ID = Expression<Int64>("ID")112 let name = Expression<String?>("name")113 let email = Expression<String>("email")114 115 //通过调用数据库连接对象的指定方法,获得指定表中的所有记录。116 //并对记录列表进行遍历。117 for user in try db.prepare(users)118 {119 //在控制台输出记录的各个字段的值120 print(">>>>>>>ID: \(user[ID]),name: \(String(describing: user[name])),email: \(user[email])")121 }122 123 //通过调用数据库连接对象的指定方法,获得指定表中的所有记录的数量。124 let count = try db.scalar(users.count)125 //并在控制台输出126 print(">>>>>>>\(count)")127 }128 catch129 {130 print("Something went wrong :(")131 }132 }133 134 //添加一个方法,对数据进行检索和更新 *** 作135 func filterandUpdateRecords()136 {137 //添加一个异常捕捉语句,对数据进行检索和更新 *** 作138 do139 {140 //初始化一个字符串常量,作为数据库文件所在的路径。141 let path = NSHomeDirectory() + "/documents/db.sqlite3"142 //创建数据库连接对象143 let db = try Connection(path)144 //创建一个数据表对象145 let users = table("users")146 147 //初始化三个字段常量148 let ID = Expression<Int64>("ID")149 let name = Expression<String?>("name")150 let email = Expression<String>("email")151 152 //通过调用数据库连接对象的过滤方法,查找索引值为1的记录。153 let user = users.filter(ID == 1)154 //通过调用数据库连接对象的执行方法,执行数据表的更新 *** 作。155 //替换索引值为1的记录的邮箱字段中的数据。156 let result = try db.run(user.update(email <- email.replace("strengthen.com",with: "strengthen.net")))157 print(">>>>>>>ID: \(result)")158 159 //再次检索数据表中的所有数据,并通过一个循环。160 for user in try db.prepare(users)161 {162 //在控制台输出记录的各个字段的值。163 print(">>>>>>>ID: \(user[ID]),email: \(user[email])")164 }165 }166 catch167 {168 print("Something went wrong :(")169 }170 }171 172 //添加一个方法,对数据进行删除 *** 作。173 func deleteRecords()174 {175 //添加一个异常捕捉语句,执行对数据的删除 *** 作。176 do177 {178 //初始化一个字符串常量,作为数据库文件所在的路径。179 let path = NSHomeDirectory() + "/documents/db.sqlite3"180 //创建数据库连接对象181 let db = try Connection(path)182 //创建一个数据表对象183 let users = table("users")184 185 //初始化一个字段常量186 let ID = Expression<Int64>("ID")187 //通过调用数据库连接对象的过滤方法,查找索引值为1的记录。188 let user = users.filter(ID == 1)189 //通过调用数据库连接对象的执行方法,执行数据表的删除 *** 作。190 let resut = try db.run(user.delete())191 //在控制台输出删除 *** 作的执行结果。192 print(">>>>>>>\(resut)")193 194 //通过调用数据库连接对象的方法,获得指定表中的所有记录的数量。195 let count = try db.scalar(users.count)196 print(">>>>>>>\(count)")197 }198 catch199 {200 print("Something went wrong :(")201 }202 }203 204 //添加一个方法,执行SQL语句。205 func executesql()206 {207 //添加一个异常捕捉语句,执行SQL语句。208 do209 {210 //初始化一个字符串常量,作为数据库文件所在的路径。211 let path = NSHomeDirectory() + "/documents/db.sqlite3"212 //创建数据库连接对象213 let db = try Connection(path)214 //通过调用数据库连接对象的方法,执行一条用来插入的语句。215 let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)")216 //通过一个循环,往数据表中依次插入两个记录。217 for email in ["[email protected]","[email protected]"]218 {219 try stmt.run(email)220 }221 222 //在控制台输出,数据库连接对象的状态信息。223 print(">>>>>>>\(db.totalChanges)")224 print(">>>>>>>\(db.changes)")225 print(">>>>>>>\(db.lastInsertRowID)")226 227 //通过一条语句,执行一次查询 *** 作,228 for row in try db.prepare("SELECT ID,email FROM users")229 {230 //查询并输出表中的所有索引值和邮箱信息231 print(">>>>>>>ID: \(row[0] ?? ""),email: \(row[1] ?? "")")232 }233 234 //执行一条查询所有记录数量的语句235 let result = try db.scalar("SELECT count(*) FROM users")236 //并在控制台输出记录的数量237 print(">>>>>>>\(result ?? 0)")238 }239 catch240 {241 print("Something went wrong :(")242 }243 }244 245 overrIDe func dIDReceiveMemoryWarning() {246 super.dIDReceiveMemoryWarning()247 // dispose of any resources that can be recreated.248 }249 }总结
以上是内存溢出为你收集整理的[Swift通天遁地]七、数据与安全-(5)使用开源类库对SQLite数据库进行高效 *** 作全部内容,希望文章能够帮你解决[Swift通天遁地]七、数据与安全-(5)使用开源类库对SQLite数据库进行高效 *** 作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)