如何在 iPhone 上访问 SQLite 数据库实例

iosapps/applicationsmobile developmentiphone更新于 2026/2/14 4:52:17

存储数据是设计任何应用程序时最重要的事情之一。存储数据的方法有很多种,其中一种就是使用 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 调试器区域的输出中。


相关文章