返回

SwiftUI中使用SQLite进行数据操作的指南

IOS

SwiftUI基础学习日记(十一)——SQLite数据操作

SQLite是一个轻量级、无服务器的关系数据库管理系统,因其易用性和跨平台兼容性而广受欢迎。在SwiftUI中,我们可以使用SQLite库来操作数据,从而为应用程序提供持久化存储解决方案。

初始化数据库

首先,我们需要初始化一个数据库对象。我们可以使用SQLite.Database类型,它代表了数据库连接。

let db = try SQLite.Database(path: "myDatabase.sqlite")

创建表

接下来,我们需要为我们的数据创建表。表由列组成,每个列都有自己的数据类型。我们可以使用CREATE TABLE语句来创建表。

try db.run(
    "CREATE TABLE users (" +
    "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
    "name TEXT, " +
    "age INTEGER" +
    ")"
)

插入数据

一旦创建了表,就可以使用INSERT INTO语句插入数据。

try db.run(
    "INSERT INTO users (name, age) VALUES ('Alice', 25)"
)

查询数据

要查询数据,我们可以使用SELECT语句。

let rows = try db.prepare(
    "SELECT * FROM users WHERE name = 'Alice'"
)

更新数据

要更新数据,我们可以使用UPDATE语句。

try db.run(
    "UPDATE users SET age = 26 WHERE name = 'Alice'"
)

删除数据

要删除数据,我们可以使用DELETE语句。

try db.run(
    "DELETE FROM users WHERE name = 'Alice'"
)

关闭数据库连接

最后,当我们完成操作时,应该关闭数据库连接。

db.close()

示例:联系人应用程序

让我们创建一个简单的联系人应用程序来展示如何使用SQLite。

import SwiftUI
import SQLite

struct Contact: Identifiable {
    let id = UUID()
    var name: String
    var phone: String
}

class ContactStore: ObservableObject {
    var database: SQLite.Database

    init() {
        let path = Bundle.main.path(forResource: "contacts", ofType: "sqlite")!
        database = try! SQLite.Database(path: path)
    }

    func createTable() {
        try! database.run(
            "CREATE TABLE IF NOT EXISTS contacts (" +
            "id TEXT PRIMARY KEY, " +
            "name TEXT, " +
            "phone TEXT" +
            ")"
        )
    }

    func addContact(_ contact: Contact) {
        try! database.run(
            "INSERT INTO contacts (id, name, phone) VALUES (?, ?, ?)",
            contact.id.uuidString, contact.name, contact.phone
        )
    }

    func getContacts() -> [Contact] {
        var contacts: [Contact] = []
        let rows = try! database.prepare("SELECT * FROM contacts")
        for row in rows {
            contacts.append(Contact(
                name: row[1],
                phone: row[2]
            ))
        }
        return contacts
    }
}

struct ContentView: View {
    @ObservedObject var store = ContactStore()

    var body: some View {
        List(store.getContacts()) { contact in
            Text(contact.name)
        }
        .onAppear {
            store.createTable()
        }
    }
}

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

在这个例子中,我们创建了一个ContactStore类,它管理着数据库连接并提供了创建表、添加联系人和获取联系人的方法。ContentView使用ContactStore来显示联系人的列表。

结论

使用SQLite库可以轻松地在SwiftUI应用程序中存储和操作数据。它提供了一个轻量级且高效的方法,可以在设备上存储数据。通过遵循本文中的步骤,您可以开始使用SQLite管理应用程序中的数据。