Hotline: 0919 365 363; Email: daotao@r2s.edu.vn

Blog

SQLite trong iOS

SQLite trong iOS
Kiến thức hữu ích

SQLite trong iOS

SQLite trong iOS sẽ hướng dẫn cho các bạn cách lưu dữ liệu ra file trong ứng dụng iOS. Và như các bạn đã biết về SQLite là hệ quản trị cơ sở dữ liệu dành cho thiết bị di động.

SQLite còn được gọi là Embedded vì nó có sẵn như là một thư viện được liên kết với các ứng dụng. Và không có máy chủ chạy ở chế độ nền. Bạn phải xử lý tất cả các hoạt động bên trong các ứng dụng thông qua các chức năng khác nhau được cung cấp bởi thư viện SQLite.

Trong bài học SQLite trong iOS chúng tôi sẽ hướng dẫn các bạn cách tạo một ứng dụng đơn giản sử dụng Swift và FMDB. FMDB viết tắt của từ Flying Meat Database và chúng ta sẽ sử dụng FMDB để thực hiện các hoạt động trên database như thêm, xem, cập nhật, xóa dữ liệu, …

SQLite trong iOS là gì?

Trong iOS, SQLite là một thư viện mã nguồn mở mạnh mẽ được sử dụng để quản lý cơ sở dữ liệu quan hệ nhỏ gọn và nhúng. SQLite cho phép bạn lưu trữ, truy vấn và quản lý dữ liệu trong các tệp tin cơ sở dữ liệu. 

Nó là một hệ quản trị cơ sở dữ liệu SQL có hiệu suất cao và phức tạp thấp, rất phù hợp cho các ứng dụng di động như iOS do yêu cầu công suất và tài nguyên thấp.

Trong iOS, bạn có thể sử dụng SQLite để tạo, truy vấn và cập nhật cơ sở dữ liệu trong ứng dụng của mình bằng ngôn ngữ lập trình Swift. Swift cung cấp các giao diện và công cụ để tương tác với SQLite, bao gồm công cụ SQLite3 và các thư viện và API liên quan trong Framework Foundation.

SQLite phổ biến trong việc xây dựng ứng dụng iOS có yêu cầu lưu trữ dữ liệu đơn giản như ứng dụng ghi chú, ứng dụng ghi lại điểm số, ứng dụng quản lý danh sách và nhiều loại ứng dụng khác yêu cầu tính năng lưu trữ và truy vấn dữ liệu.

Chuẩn bị của SQLite trong iOS

Chúng ta có thể sử dụng project hiện đang có hoặc là tạo mới một project dạng Single View Application. Và sau khi project được tạo, chúng ta phải thêm thư viện SQLite dynamic library (libsqlite3.0.tbd) vào project với các bước thực hiện như sau đây (Lưu ý project trong bài học này có tên là SQLiteIniOSTutorial)

Bước 1: Chọn thẻ Build Phases để hiển thị thông tin build -> tại Link Binary With Libraries click chuột vào nút ‘+’

SQLite trong iOS

Bước 2: Sử dụng chức năng tìm kiếm và tìm libsqlite3.0.tbd -> chọn Add

SQLite trong iOS

Bước 3: Tải FMDB source code và copy vào project

3.1 Chọn Source Control -> chọn Check Out

SQLite trong iOS

3.2 Nhập link sau vào Or enter a repository location -> chọn Next

https://github.com/ccgus/fmdb.git
SQLite trong iOS

3.3 Chọn master -> chọn Next

SQLite trong iOS

3.4 Chỉ định vị trí lưu source code -> chọn Download

SQLite trong iOS

Một cửa sổ Xcode project (fmdb project) mới sẽ được hiển thị chứa source code của FMDB như hình ảnh bên dưới

SQLite trong iOS

3.5 Chúng ta sẽ đóng fmdb project và quay lại project SQLiteIniOSTutorial và thực hiện các thao tác sau

3.5.1 Tạo thư mục mới dùng để chứa FMDB source code

Nhấp chuột phải thư mục SQLiteIniOSTutorial -> chọn New Group -> đặt tên fmdb

SQLite trong iOS

3.5.2 Tạo thêm FMDB source code vào thư mục fmdb

Nhấp chuột phải fmdb -> chọn Add Files to “….”

SQLite trong iOS

Chọn tất cả các tập tin được chứa trong thư mục fmdb -> src -> fmdb -> chọn Add

SQLite trong iOS

Và một hộp thoại xuất hiện -> chọn Create Bridging Header

Create Bridging Header

3.5.3 Import FMDB.h vào tập tin Bridging-Header.h

tập tin Bridging-Header.h

Tạo cơ sở dữ liệu và bảng của SQLite trong iOS

Khi ứng dụng được khởi động nó cần phải kiểm tra cơ sở dữ liệu đã được tồn tại hay chưa. Nếu chưa tồn tại thì phải tiến hành tạo cơ sở dữ liệu và bảng. Bảng thuộc cơ sở dữ liệu và được sử dụng để lưu trữ các thông tin mà người dùng nhập vào. Đoạn code thực thi tác vụ này có thể đặt trong phương thức viewDidLoad của lớp view controller

override func viewDidLoad() {

 super.viewDidLoad()

 let fm = NSFileManager.defaultManager()
 let dd = fm.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
 let fp = dd.URLByAppendingPathComponent("Tên_cơ_sở_dữ_liệu.db")
 let dbPath = fp.path!

 if !fm.fileExistsAtPath(dbPath as String) {
   let db = FMDatabase(path: dbPath as String)

   if db == nil {
     print("Lỗi tạo cơ sở dữ liệu: \(db.lastErrorMessage())")
   }

  if db.open() {
   let sql = "Câu lệnh CREATE TABLE"

   if !db.executeStatements(sql) {
     print("Lỗi tạo bảng: \(db.lastErrorMessage())")
   }

   db.close()
  } else {
    print("Lỗi mở kết nối: \(db.lastErrorMessage())")
  }
 }
}

Thêm dữ liệu của SQLite trong iOS

Trước khi thực hiện thêm dữ liệu, chúng ta phải mở cơ sở dữ liệu ra và thực thi câu lệnh INSERT để thêm một record vào bảng. Sau khi được thực thi thêm dữ liệu, chúng ta cần phải đóng cơ sở dữ liệu. Và để có thể thực thi được câu lệnh INSERT, chúng ta sẽ sử dụng phương thức executeUpdate của FMDatabase. Phía Bên dưới là đoạn code xử lý thêm dữ liệu vào bảng (Lưu ý dbPath được tạo trong phương thức viewDidLoad)

let db = FMDatabase(path: dbPath as String)

if db.open() {
  let sql = "Câu lệnh INSERT"
  let ret = db.executeUpdate(sql, withArgumentsInArray: nil|values)

  if !ret {
    print("Lỗi thêm dữ liệu: \(db.lastErrorMessage())")
  } else {
    print("Thêm dữ liệu thành công")
  }

  // Đóng cơ sở dữ liệu
  db.close()
} else {
  print("Lỗi mở cơ sở dữ liệu: \(db.lastErrorMessage())")
}

Ví dụ thêm dữ liệu vào bảng Employee(id, name, address)

let db = FMDatabase(path: dbPath as String)

if db.open() {
  let sql = "INSERT INTO Employee VALUES (?, ?, ?)"
  let ret = db.executeUpdate(sql, withArgumentsInArray: [1, "GSTH", "HCM"])

  if !ret {
    print("Lỗi thêm dữ liệu: \(db.lastErrorMessage())")
  } else {
    print("Thêm dữ liệu thành công")
  }

  // Đóng cơ sở dữ liệu
  db.close()
} else {
  print("Lỗi mở cơ sở dữ liệu: \(db.lastErrorMessage())")
}

Xem dữ liệu của SQLite trong iOS

Chúng ta sẽ sử dụng câu lệnh SELECT để truy xuất dữ liệu của bảng. Và nếu như phương thức executeUpdate dùng để thực thi câu lệnh INSERT  vậy thì phương thức executeQuery dùng để thực thi câu lệnh SELECT và phương thức này sẽ được trả về một đối tượng FMResultSet nếu câu lệnh SELECT đã được thực thi thành công.

let db = FMDatabase(path: dbPath as String)

db.open()

let rs: FMResultSet! = db.executeQuery("Câu lệnh SELECT", withArgumentsInArray: nil|values)

if (rs != nil) {
  // Duyệt kết quả
  while rs.next() {
    // Đọc dữ liệu
    variable = rs.stringForColumn("Tên_cột")

    // ...
  }
}

// Đóng cơ sở dữ liệu
db.close()>

Ví dụ xem dữ liệu của bảng Employee(id, name, address)
let db = FMDatabase(path: dbPath as String)

db.open()

let rs: FMResultSet! = db.executeQuery("SELECT * FROM Employee", withArgumentsInArray: nil)
let alEmp = NSMutableArray()

if (rs != nil) {
  // Duyệt kết quả
  while rs.next() {
    // Tạo đối tượng của lớp EmployeeInfo
    let empInfo = EmployeeInfo()

    // Đọc dữ liệu
    id : Int = rs.stringForColumn("id")
    name : String = rs.stringForColumn("name")
    address : String = rs.stringForColumn("address")

    // Gán giá trị cho các thuộc tính
    empInfo.id = id
    empInfo.name = name
    empInfo.address = address

    // Thêm empInfo vào mảng
    alEmp.addObject(empInfo)
  }
}

// Đóng cơ sở dữ liệu
db.close()

Cập nhật dữ liệu của SQLite trong iOS

Tương tự như khi thực thi câu lệnh INSERT chúng ta sẽ sử dụng phương thức executeUpdate của FMDatabase để thực hiện cập nhật dữ liệu. Bên dưới đây là đoạn code xử lý cập nhật dữ liệu cho bảng

let db = FMDatabase(path: dbPath as String)

if db.open() {
  let sql = "Câu lệnh UPDATE"
  let ret = db.executeUpdate(sql, withArgumentsInArray: nil|values)

  if !ret {
    print("Lỗi cập nhật dữ liệu: \(db.lastErrorMessage())")
  } else {
    print("Cập nhật dữ liệu thành công")
  }

  // Đóng cơ sở dữ liệu
  db.close()
} else {
  print("Lỗi mở cơ sở dữ liệu: \(db.lastErrorMessage())")
}

Xoá dữ liệu của SQLite trong iOS

Tương tự n như khi thực thi câu lệnh INSERT chúng ta sẽ sử dụng phương thức executeUpdate của FMDatabase để thực hiện xoá dữ liệu. Bên dưới đây là đoạn code xử lý xoá dữ liệu của bảng

let db = FMDatabase(path: dbPath as String)

if db.open() {
  let sql = "Câu lệnh DELETE"
  let ret = db.executeUpdate(sql, withArgumentsInArray: nil|values)

  if !ret {
    print("Lỗi xoá dữ liệu: \(db.lastErrorMessage())")
  } else {
    print("Xoá dữ liệu thành công")
  }

  // Đóng cơ sở dữ liệu
  db.close()
} else {
  print("Lỗi mở cơ sở dữ liệu: \(db.lastErrorMessage())")
}

Một số bài tập thực hành của SQLite trong iOS

Bài thực hành số 1: Thiết kế và viết xử lý cho ứng dụng quản lý thông tin của nhân viên. Ứng dụng gồm 3 màn hình

Màn hình chính

Màn hình chính

Màn hình Thêm thông tin của nhân viên

Màn hình Thêm thông tin của nhân viên

Màn hình Hiển thị thông tin của nhân viên

Màn hình Hiển thị thông tin của nhân viên

Viết xử lý

Khi người dùng nhấp chọn nút Thêm nhân viên, màn hình Thêm thông tin của nhân viên được hiển thị. Khi người dùng chọn nút Xem thông tin của nhân viên, màn hình Hiển thị thông tin của nhân viên được hiển thị

Đối với màn hình Thêm thông tin của nhân viên, sau khi người dùng nhập các thông tin và chọn nút Lưu hoặc Lưu và thoát, thông tin của nhân viên được lưu vào SQLite database. Lưu ý các thông tin trên màn hình yêu cầu người dùng phải nhập đầy đủ tất cả các thông tin.

Đối với màn hình Xem thông tin của nhân viên và dữ liệu sẽ được đọc từ SQLite database và hiển thị vào UI Table View.

Bài thực hành số 2: Bổ sung chức năng cho màn hình Xem thông tin của nhân viên. Cụ thể như hình ảnh bên dưới

Bài thực hành số 2:

Bổ sung thứ nhất: Ứng dụng cho phép người dùng tìm kiếm theo tên bằng cách nhập đầy đủ họ và tên hoặc chỉ nhập tên và sau đó chọn Hiển thị.

Bổ sung thứ hai: Ứng dụng cho phép người dùng cập nhật hoặc xóa các thông tin ngay trên TableView.

Tổng kết của SQLite trong iOS

Như vậy, qua bài viết về SQLite trong iOS với swift trên đây, R2S chúng tôi đã giúp bạn hiểu được về tạo một thể hiện của nsfilemanager, kiểm tra sự tồn tại của một file (tập tin), ghi dữ liệu vào file, đọc dữ liệu từ file, xóa file, chương trình mẫu

Đừng quên bỏ lỡ bất cứ bài viết nào của chúng tôi để học thêm nhiều kiến thức hữu ích về lập trình iOS nhé.

Hãy đến website của R2S để có thể tìm hiểu sâu hơn vào lập trình và công nghệ thông tin để có thêm nhiều kiến thức về nó hơn nha. 

Bài viết gốc được đăng tải tại giasutinhoc.vn

Alert: You are not allowed to copy content or view source !!