首先需要在項目中引入 FMDB 的 Swift 版本庫的畴,可以通過 CocoaPods 進行引入峻汉,或手動下載庫源代碼并將其添加到項目中朦佩。
在使用 FMDB 進行數(shù)據(jù)庫操作時鹿寨,可以先定義一個繼承自 FMDatabase 的數(shù)據(jù)庫類,用于管理數(shù)據(jù)庫連接和操作膘茎。
import Foundation
import FMDB
class MyDatabase: FMDatabase {
static let shared = MyDatabase()
override init() {
super.init(path: "path_to_database")
}
func setup() throws {
guard open() else {
throw DatabaseError.connectionFailed
}
let createTableSQL = """
CREATE TABLE IF NOT EXISTS person (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
"""
try executeUpdate(createTableSQL, values: nil)
}
func insert(person: Person) throws {
let insertSQL = "INSERT INTO person (name, age) VALUES (?, ?)"
try executeUpdate(insertSQL, values: [person.name, person.age])
}
func getAllPersons() throws -> [Person] {
let selectSQL = "SELECT * FROM person"
let resultSet = try executeQuery(selectSQL, values: nil)
var persons = [Person]()
while resultSet.next() {
let person = Person(id: resultSet.longLongInt(forColumn: "id"),
name: resultSet.string(forColumn: "name") ?? "",
age: resultSet.long(forColumn: "age"))
persons.append(person)
}
return persons
}
func deletePerson(id: Int64) throws {
let deleteSQL = "DELETE FROM person WHERE id = ?"
try executeUpdate(deleteSQL, values: [id])
}
func updatePerson(person: Person) throws {
let updateSQL = "UPDATE person SET name = ?, age = ? WHERE id = ?"
try executeUpdate(updateSQL, values: [person.name, person.age, person.id])
}
}
在這個例子中桃纯,定義了一個 MyDatabase
類,它繼承自 FMDatabase
披坏,用于管理數(shù)據(jù)庫連接和操作态坦。它包含了幾個方法,分別用于初始化數(shù)據(jù)庫棒拂、創(chuàng)建表伞梯、插入數(shù)據(jù)、查詢數(shù)據(jù)帚屉、刪除數(shù)據(jù)和更新數(shù)據(jù)谜诫。
在這個例子中,定義了一個 Person
結(jié)構(gòu)體攻旦,用于表示一個人的信息:
struct Person {
var id: Int64 = 0
var name: String = ""
var age: Int = 0
}
使用該數(shù)據(jù)庫類進行數(shù)據(jù)庫操作時喻旷,示例代碼如下:
do {
try MyDatabase.shared.setup()
let person = Person(name: "Tom", age: 18)
try MyDatabase.shared.insert(person: person)
let persons = try MyDatabase.shared.getAllPersons()
print(persons)
if let firstPerson = persons.first {
try MyDatabase.shared.deletePerson(id: firstPerson.id)
var updatedPerson = firstPerson
updatedPerson.name = "Jerry"
updatedPerson.age = 20
try MyDatabase.shared.updatePerson(person: updatedPerson)
}
} catch {
print(error)
}
在這個例子中,首先調(diào)用 setup
方法進行數(shù)據(jù)庫的初始化和表的創(chuàng)建牢屋。
通過創(chuàng)建一個 Person
實例并調(diào)用 insert
方法將該實例插入到數(shù)據(jù)庫中且预,然后調(diào)用 getAllPersons
方法獲取所有人員的信息槽袄,并輸出到控制臺。
接下來锋谐,刪除第一個人的信息遍尺,并更新第二個人的信息,最后再次調(diào)用 getAllPersons
方法獲取所有人員的信息怀估,并輸出到控制臺狮鸭。
需要注意的是,在進行數(shù)據(jù)庫操作時多搀,需要使用異常處理來捕獲可能出現(xiàn)的錯誤歧蕉。
do {
try MyDatabase.shared.setup()
let person = Person(name: "Tom", age: 18)
try MyDatabase.shared.insert(person: person)
let persons = try MyDatabase.shared.getAllPersons()
print(persons)
if let firstPerson = persons.first {
try MyDatabase.shared.deletePerson(id: firstPerson.id)
var updatedPerson = firstPerson
updatedPerson.name = "Jerry"
updatedPerson.age = 20
try MyDatabase.shared.updatePerson(person: updatedPerson)
}
} catch {
print(error)
}