如何在 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。


数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP