★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-nntespjo-mb.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
目錄:[Swift]通天遁地Swiftios
本文將演示使用開源類庫對SQLite數據庫進行高效操做。git
首先確保在項目中已經安裝了所需的第三方庫。github
點擊【Podfile】,查看安裝配置文件。sql
1 platform :ios, ‘12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'SQLite.swift' 7 end
根據配置文件中的相關配置,安裝第三方庫。數據庫
在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】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 <- "alice@strengthen.com") 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 do 102 { 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 catch 129 { 130 print("Something went wrong :(") 131 } 132 } 133 134 //添加一個方法,對數據進行檢索和更新操做 135 func filterAndUpdateRecords() 136 { 137 //添加一個異常捕捉語句,對數據進行檢索和更新操做 138 do 139 { 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]), name: \(String(describing: user[name])), email: \(user[email])") 164 } 165 } 166 catch 167 { 168 print("Something went wrong :(") 169 } 170 } 171 172 //添加一個方法,對數據進行刪除操做。 173 func deleteRecords() 174 { 175 //添加一個異常捕捉語句,執行對數據的刪除操做。 176 do 177 { 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 catch 199 { 200 print("Something went wrong :(") 201 } 202 } 203 204 //添加一個方法,執行SQL語句。 205 func executeSQL() 206 { 207 //添加一個異常捕捉語句,執行SQL語句。 208 do 209 { 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 ["leo@strengthen.com", "jame@strengthen.com"] 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 catch 240 { 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 }