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

更新于: 2019-07-30

944 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告