如何在 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 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.