如何在 iPhone 上访问 SQLite 数据库实例
在设计任何应用程序时,存储数据是最重要的事情之一。有许多方法可以存储数据,其中一种方法是 SQLite 数据库。
有多种方法可以访问 iPhone 上的 SQLite 数据库,我们将使用 Swift 查看最简单的方法。
SQLite 是一种关系型数据库管理系统,包含在嵌入到应用程序中的 C 编程库中。
在本教程中,我们将创建一个示例应用程序,该应用程序将包含一个文本字段以输入名称,我们将名称存储在我们的 SQLite 数据库中,并在用户点击“显示”按钮时打印相同的名称。
那么,让我们开始吧
步骤 1 − 打开 Xcode -→ 单视图应用程序 -→ 我们将其命名为 DBSqlite。
步骤 2 − 让我们开发我们的 UI,打开 Main.storyboard 并添加一个文本字段和两个按钮,如下所示。
步骤 3 − 为两个按钮创建 @IBAction,为文本字段创建 @IBOutlet,并分别将其命名为 btnInsert、btnShowData 和 name。
因此,我们添加了两个按钮,一个用于插入数据,另一个用于显示数据。我们还创建了一个文本字段,我们可以在其中输入要插入数据库的名称。
步骤 4 − 让我们创建我们的 SQLite 文件并打开数据库连接。
在 ViewController.swift 中编写
导入 SQLite3
在 ViewDidLoad 下编写以下代码,它将创建一个 .sqlite 文件,我们可以打印其创建位置。我们将我们的 sqlite 文件命名为“user_name.sqlite”,因为我们只打算插入名称。
let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("user_name.sqlite")
现在我们将使用 sqlite3_open() 函数打开数据库。
创建一个 OpaquePointer 对象。我们将将其用于操作。在 ViewDidLoad 之上,全局创建此变量。
var db: OpaquePointer?
步骤 5 − 现在让我们创建表格,要在 viewDidLoad 方法中创建表格,请编写以下代码。
//creating table if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK { let errorMsg = String(cString: sqlite3_errmsg(db)!) print("There's error creating the table: \(errorMsg)") }
步骤 5 之后,您的最终代码应如下所示。
import UIKit import SQLite3 class ViewController: UIViewController { var db: OpaquePointer? @IBOutlet var name: UITextField! override func viewDidLoad() { super.viewDidLoad() let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) .appendingPathComponent("user_name.sqlite") print (file_url) //to print the path of sqlite. //opening the database if sqlite3_open(file_URL.path, &db) != SQLITE_OK { print("There's error in opening the database") } //create table if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK { let errorMsg = String(cString: sqlite3_errmsg(db)!) print("There's error creating the table: \(errorMsg)") } } @IBAction func btnInsert(_ sender: Any) { } @IBAction func btnShowData(_ sender: Any) { } }
运行以上代码,您应该不会收到任何错误,通过导航到该位置检查 sqlite 文件。
步骤 6 − 现在我们将编写插入数据的代码,所以在 btnInsert 中编写以下代码
var statement: OpaquePointer? guard let user_name = name.text, !user_name.isEmpty else { return } let query = "INSERT INTO users (name) VALUES (?)" if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } if sqlite3_bind_text(statement, 1, user_name, -1, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure binding name: \(errmsg)") return } if sqlite3_step(statement) != SQLITE_DONE { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure inserting users: \(errmsg)") return
在这里,我们只是将文本字段中的值写入我们的表格。
步骤 7 − 现在我们应该显示数据,在 btnShowData 中编写以下代码
let query = "SELECT * FROM users" var statement:OpaquePointer? if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } while(sqlite3_step(statement) == SQLITE_ROW) { let name = String(cString: sqlite3_column_text(statement, 1)) print(name) }
您的最终代码应如下所示
import UIKit import SQLite3 class ViewController: UIViewController { var db: OpaquePointer? @IBOutlet var name: UITextField! override func viewDidLoad() { super.viewDidLoad() let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) .appendingPathComponent("user_name.sqlite") //opening the database if sqlite3_open(file_URL.path, &db) != SQLITE_OK { print("There's error in opening the database") } //creating table if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK { let errorMsg = String(cString: sqlite3_errmsg(db)!) print("There's error creating the table: \(errorMsg)") } } @IBAction func btnInsert(_ sender: Any) { var statement: OpaquePointer? guard let user_name = name.text, !user_name.isEmpty else { return } let query = "INSERT INTO users (name) VALUES (?)" if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } if sqlite3_bind_text(statement, 1, user_name, -1, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure binding name: \(errmsg)") return } if sqlite3_step(statement) != SQLITE_DONE { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure inserting users: \(errmsg)") return } } @IBAction func btnShowData(_ sender: Any) { let query = "SELECT * FROM users" var statement:OpaquePointer? if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } while(sqlite3_step(statement) == SQLITE_ROW) { let name = String(cString: sqlite3_column_text(statement, 1)) print(name) } } }
现在我们将运行代码并查看输入名称 HELLO 并点击插入。然后点击显示,您将在 Xcode 的调试器区域的输出中看到打印出的 HELLO。