如何在 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)")
}
After step 5, your final code should like below.
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",然后点击"插入"。然后点击"显示",您将看到"HELLO"显示在 Xcode 调试器区域的输出中。



