[Swift通天遁地]7、數據與安全-(5)高效操做SQLite數據庫

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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.02 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 }
相關文章
相關標籤/搜索