前言
在 Swift 開發中,使用 SQLite 作為資料庫是一個相當普遍的選擇。雖然原生 SQLite 需要匯入 .h 檔案並使用 Objective-C 相關的程式碼,但透過第三方框架 SQLite.swift,這個過程變得更加簡單。在這篇文章中,我們將深入探討如何在 Swift 中使用 SQLite,並提供完整的實作範例。
SQLite 步驟與基本文法
在 iOS 應用中,我們將在 Document 文件夾下創建一個名為 `Chuhuo.sqlite` 的資料庫,並建立與資料庫的連接。以下是建立資料庫的程式碼:
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let db = try? Connection("\(path)/Chuhuo.sqlite")
接下來,我們需要創建一個資料表,這裡我們使用 `stock` 作為表名:
let users = Table("stock")
然後設置資料表的欄位資料格式,除了 id 欄位外,我們將使用 String 來進行測試:
let id = Expression<Int64>("id")
let price = Expression<String>("price")
let product = Expression<String>("product")
let date = Expression<String>("date")
let amount = Expression<String>("amount")
接下來,我們將創建資料表,並確保 id 欄位是主鍵,以便於未來的資料庫管理:
新增 CREATE
使用以下程式碼創建資料表:
try! db?.run(users.create(ifNotExists: true, block: { (table) in
table.column(id, primaryKey: true)
table.column(price)
table.column(product)
table.column(date)
table.column(amount)
}))
這段程式碼等同於以下的 SQL 語句:
CREATE TABLE IF NOT EXISTS "stock" (
"id" INTEGER PRIMARY KEY NOT NULL,
"price" TEXT,
"product" TEXT,
"date" TEXT,
"amount" TEXT
)
插入 INSERT
接下來,我們將新增資料到資料表中。以下是插入資料的範例程式碼:
do {
let rowid = try db?.run(users.insert(price <- "100", product <- "car", date <- "2025/06/01", amount <- "1"))
print("inserted id: \(rowid!)")
} catch {
print("insertion failed: \(error)")
}
這段程式碼的 SQL 等價語句如下:
INSERT INTO stock (price, product, date, amount) VALUES ('100', 'car', '2025/06/01', '1')
查詢 SELECT
要查詢資料,可以使用以下程式碼:
for user in (try? db?.prepare(users))!! {
print("id: \(user[id]), price: \(user[price]), product: \(user[product])")
}
這段程式碼對應的 SQL 語句是:
SELECT * FROM stock
更新 UPDATE
若要更新資料,可以使用以下程式碼:
let alice = users.filter(id == 5)
try? db?.run(alice.update(price <- "130"))
這相當於以下的 SQL 語句:
UPDATE stock SET price = '130' WHERE id = 5
刪除 DELETE
最後,若要刪除資料,可以使用以下程式碼:
let alice = users.filter(id == 5)
try? db?.run(alice.delete())
對應的 SQL 語句為:
DELETE FROM stock WHERE id = 5
以上是使用 SQLite 在 Swift 中進行基本資料操作的完整流程。我們已經測試過所有程式碼,確保其正確運行。
Q&A(常見問題解答)
1. SQLite 和 Core Data 有什麼區別?
SQLite 是一種輕量級的資料庫,而 Core Data 是一個物件圖形和持久化框架。SQLite 提供底層的資料庫操作,而 Core Data 提供更高層次的物件管理和資料持久化功能。
2. 如何處理 SQLite 中的錯誤?
在使用 SQLite.swift 時,建議使用 `do-catch` 語句來捕捉和處理錯誤,以便於調試和處理異常情況。
3. SQLite 資料庫的性能如何?
SQLite 是一個輕量級的資料庫,適合在行動裝置和小型應用中使用,性能表現通常相當優異,但在處理大量資料或複雜查詢時,可能會出現性能瓶頸。
—