Flutter – Cơ sở dữ liệu SQLite

Tram Ho

Giới thiệu

Có lẽ mọi người đã không còn xa lạ gì với SQLite trong lập trinh mobile, đây là công cụ hữu ích đễ caching data hoặc lưu trữ dưới local. Ở android thì chúng la đã quá quen với thư viện Room, đây là thư viện mạnh mẽ cung cấp cáp phương thức để khai thác hết sức mạnh của SQLite một cách dễ dàng nhất. Trên Flutter chúng ta cũng có rất nhiều plugin để thao tác với SQLite một cách dễ dàng tiêu biểu như là : sqlcool, sqflite, floor…. Chi tiết về các plugin các bạn có thể tìm kiếm trên pub.dev nhé. Ở đây mình sẽ sử dụng plugin floor vì nó có nhiều nét tương đồng với thư viện Room ở trên android và thật tuyệt vời khi plugin này support cả android và ios

Floor

Floor là một thư viện cung cấp lightweight SQLite abstraction với việc tự động mapping giữa in-memory object và database rows trong khi vẫn cung cấp toàn quyền kiểm soát cơ sở dữ liệu với việc sử dụng SQL

Phiên bản hiện tại của floor là 0.9.0

Sử dụng

  1. Add dependencies cần thiết vào file pubspec.yaml

  • build_runner: công cụ để gen ra các file cần thiết
  1. Create a Entity
    Mỗi Entity sẽ đại diện cho một table trong database của chúng ta

  • Từ khóa @entity: đáng dấu đây là một table
  • Từ khóa @primaryKey: đáng dấu thuộc tính này là khóa chính của bảng. Thuộc tính này là bắt buộc. có thể đặt nhhiều field làm Primarykey khi đó sử dụng @Entity(primaryKeys: [‘id’, ‘name’])
  • Từ khóa @ColumnInfo: để thay đổi thông tin của field như tên, notnull
  1. Create a DAO

Class DAO là thành phần chịu trách nhiệm quản lý quyền truy cập vào database . abstract class chứa các phương thức truy vấn database

  • @Query : annotation đánh dấu các phương thức queries (select, delete)
  • @insert: annotation đánh dấu phương thức insert data
  • @delete: annotation đánh dấu phương thức delete data
  • @transaction: đánh dấu phương thức là một tập transaction bao gôm một hoặc nhiều các transaction khác nhau
  1. Create Database

Tạo một abstract class enxtend từ FloorDatabase. Anotation @Database để đánh dấu version của database cũng như các entities cần thiết lưu trữ.

  1. Đảm bảo rằng bạn đã add part ‘database.g.dart’; file này sẽ được gen tự động khi chúng ta chạy build_runner
  2. Chạy dòng lệnh flutter packages pub run build_runner build trong terminal để gen các file cần thiết. Hoặc bạn có thể chạy lệnh flutter packages pub run build_runner watch để tự động gen khi có sự thay đổi về database hay các entities.
  3. Sử dụng generated code. Để get được instance của database hãy sử dụng $FloorAppDatabase class đã được tạo tự động

app_database.db: Là tên database bạn muốn đặt

Architecture

Querying

Các phương thức query được đánh dấu bằng annotation @Query(). Khi sử dụng query cần đảm bảo tính chính xác của lệnh truy vấn. Câu lệnh query có thể trả về kiểu Future, Stream của một Entity hoặc Void. Vài ví dụ về truy vấn query

Migrations

Qua cá version của app việc thay đổi cấu trúc database thường xuyên sảy ra nên việc migrations databse là việc bắt buộc để đảm bảo tính toàn vẹn của data.

Sau khi có thay đổi về cấu trúc database tiến hàng nâng version của database. Sau đó định nghĩa các thay đổi bằng các hàm thực thi như migration1to2…. Cuối cùng sử dụng addMigrations() khi build database.

Callback

Nguồn: https://pub.dev/packages/floor#persisting-data-changes

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo