SQLite with FMDB in Swift (P2)

by Hoang Anh Tuan
443 views
This entry is part [part not set] of 2 in the series Swift SQLite with FMDB

Nội dung bài viết:

  • Truy vấn insert
  • Truy vấn select
  • Truy vấn delete
  • Truy vấn update

Truy vấn INSERT

  • Câu truy vấn này dùng để thêm bản ghi vào table
  • Có 2 cách để viết 1 câu truy vấn insert.
    Cách 1:

Cách 2: Trong trường hợp bạn tạo 1 bản ghi mới đầy đủ các trường của bảng ghi, thì k cần liệt kê cụ thể tên các trường như cách 1:

  • Để thực hiện truy vấn INSERT vào table Book ở bài viết trước, việc đầu tiên là viết 1 câu truy vấn:
let query = "insert into Book (name, author, price) values ('Kill the mockingbird', 'HarperLee', 85000)"

Đây là 1 câu truy vấn thực hiện sự thay đổi đến database, nên ta vẫn sử dụng lệnh executeUpdate(…) để thực hiện câu query:
Ở đây, vì table Book được khởi tạo với thuộc tính id tự động tăng, nên ta có thể bỏ qua việc khai báo id.

func insertBook() {
    if openDatabaseConnectionAtPath(path: getDatabasePath()) {
        let query = "insert into Book (name, author, price) values ('Kill the mockingbird', 'HarperLee', 85000)"
        do {
           try database.executeUpdate(query, values: nil)
        } catch let err {
           print("Insert failed, error: \(err.localizedDescription)")
        }
    }
    database.close()
}

Ở đây, table Book có cả 4 trường đều khác nil, tuy nhiên trường id và price có thuộc tính default nên có thể không cần khai báo trong câu lệnh insert, nhưng nếu bạn insert thêm 1 bản ghi mà không có trường name hay author thì FMDB sẽ trả về lỗi và không thể insert được.

Note: Bạn có thể thực hiện nhiều câu truy vấn cùng 1 lúc, bằng cách gộp chúng vào 1 câu truy vấn chung, mỗi câu truy vấn nhỏ ngăn cách nhau bằng 1 dấu ;

  • Ngoài ra, còn có 1 cách thực hiện câu lệnh executeUpdate thuận tiện hơn bằng cách sử dụng thuộc tính values như sau:
  • Ở đây, nameauthor không được cụ thể ngay từ câu truy vấn, mà được để 1 dấu ? có tác dụng như 1 placeholder để truyền trường name, author vào sau.
  • Khi thực hiện lệnh executeQuery, điền lần lượt các giá trị muốn truyền tương ứng vào các dấu ? vào thuộc tính values.

Truy vấn SELECT:

  • Câu truy vấn này dùng để lấy các bản ghi từ table.
  • Cách viết câu truy vấn Select:
    + SELECT column1, column2,… FROM table_name; // Lấy 1 vài trường cụ thể
    + SELECT * FROM table_name; // Lấy tất cả các bản ghi
    + Ngoài ra có thể kết hợp thêm Where, Order by,… vào câu truy vấn để lọc các bản ghi
  • Ví dụ thực hiện câu truy vấn lấy tất cả các sách trong table Book:
Lấy tất cả các bản ghi và sắp xếp theo giá tăng dần
Lấy tất cả các tên tác giả mà có trường id = 2
  • Câu truy vấn select k làm thay đổi DB, nên sử dụng lệnh executeQuery(…) để thực hiện.
  • Câu truy vấn này trả về 1 tập dữ liệu FMResultSet, từ đó convert về kiểu dữ liệu mà ta mong muốn.

Truy vấn DELETE

  • Dùng để xóa bản ghi đang có trong table.
  • Cách viết câu truy vấn delete:
    DELETE FROM table_name WHERE condition;
  • Ví dụ thực hiện câu truy vấn delete:

Truy vấn UPDATE:

  • Dùng để thay đổi giá trị của bản ghi đang có trong table.
  • Cách viết câu truy vấn:
    UPDATE table_name SET column1 = value1, column2 = value2, … WHERE condition;
  • Ví dụ thực hiện câu truy vấn:

Kết luận:

  • Nên define các trường thành Constant để tránh gõ nhầm khi viết câu truy vấn.
  • Sử dụng lệnh executeUpdate để thực hiện thay đổi DB, dùng lệnh executeQuery để thực hiện việc lấy các bản ghi.
  • Các câu lệnh có thể gộp vào với nhau, nhưng ngăn cách với nhau bằng dấu ;.
  • Luôn đóng liên kết tới DB sau khi thực hiện xong câu truy vấn.
Series Navigation

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.