Computer >> Máy Tính >  >> Lập trình >> IOS

Làm cách nào để truy cập phiên bản cơ sở dữ liệu SQLite trên iPhone

Lưu trữ dữ liệu là một trong những điều quan trọng nhất khi chúng ta thiết kế bất kỳ ứng dụng nào. Có rất nhiều cách để lưu trữ dữ liệu, một trong những cách đó là cơ sở dữ liệu SQLite.

Có nhiều cách để truy cập cơ sở dữ liệu SQLite trên iPhone, Chúng ta sẽ thấy cách dễ nhất để làm như vậy trong Swift.

SQLite là một hệ quản trị cơ sở dữ liệu quan hệ có trong thư viện lập trình C được nhúng vào một ứng dụng.

Trong hướng dẫn này, chúng tôi sẽ tạo một ứng dụng mẫu sẽ có trường văn bản để nhập tên, chúng tôi sẽ lưu trữ tên trong cơ sở dữ liệu SQLite của mình và sẽ in giống như vậy khi người dùng nhấn vào nút hiển thị.

Vậy hãy bắt đầu

Bước 1 - Mở Xcode - → Ứng dụng Single View - → Tên là DBSqlite.

Bước 2 - Hãy phát triển giao diện người dùng của chúng tôi, Mở Main.storyboard và thêm một trường văn bản và hai nút như được hiển thị bên dưới.

Bước 3 - Tạo @IBAction cho cả các nút và @IBOutlet cho trường văn bản và đặt tên cho chúng lần lượt là btnInsert, btnShowData và tên.

Làm cách nào để truy cập phiên bản cơ sở dữ liệu SQLite trên iPhone

Vì vậy, chúng tôi đã thêm hai nút một để chèn dữ liệu và nút khác để hiển thị nó. Chúng tôi cũng đã tạo một trường văn bản nơi chúng tôi có thể nhập tên phải được chèn vào db.

Bước 4 - Hãy tạo tệp SQLite của chúng tôi và mở kết nối cơ sở dữ liệu.

Trong ViewController.swift, hãy viết

Nhập SQLite3

Trong ViewDidLoad, hãy viết đoạn mã sau, nó sẽ tạo một tệp .sqlite và chúng ta có thể in vị trí mà nó đã được tạo. Chúng tôi đang đặt tên tệp sqlite của mình là “user_name.sqlite” vì chúng tôi sẽ chỉ chèn tên.

let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("user_name.sqlite")

Bây giờ chúng ta sẽ sử dụng hàm sqlite3_open () để mở cơ sở dữ liệu.

Tạo một đối tượng của OpaquePointer. Chúng tôi sẽ sử dụng điều này cho các hoạt động. Tạo biến này trên ViewDidLoad, trên toàn cầu.

var db:OpaquePointer?

Bước 5 - Hãy tạo bảng ngay bây giờ, để tạo bảng, hãy viết mã bên dưới trong phương thức viewDidLoad của bạn.

//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)")
}

Sau bước 5, mã cuối cùng của bạn sẽ giống như bên dưới.

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) {
   }
}

Chạy đoạn mã trên và bạn sẽ không gặp bất kỳ lỗi nào, hãy kiểm tra tệp sqlite bằng cách điều hướng đến vị trí.

Bước 6 - Bây giờ chúng ta sẽ viết đoạn mã để chèn dữ liệu, vì vậy trong btnInsert hãy viết đoạn mã dưới đây

Câu lệnh
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

Ở đây, chúng tôi chỉ đơn giản là viết các giá trị của chúng tôi từ trường văn bản vào bảng của chúng tôi.

Bước 7 - Bây giờ chúng ta sẽ hiển thị dữ liệu, hãy viết đoạn mã dưới đây trong 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)
}

Mã cuối cùng của bạn sẽ giống như bên dưới

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)
      }
   }
}

Bây giờ chúng ta sẽ chạy mã và xem nhập tên HELLO và nhấn vào chèn. Sau đó, nhấn vào chương trình, bạn sẽ thấy HELLO được in ở đầu ra trong khu vực trình gỡ lỗi trong Xcode.

Làm cách nào để truy cập phiên bản cơ sở dữ liệu SQLite trên iPhone

Làm cách nào để truy cập phiên bản cơ sở dữ liệu SQLite trên iPhone