Flutter cung cấp cho ta rất nhiều package nâng cao để làm việc với database. Các package quan trong nhất là:
- sqflite – được dùng để kết nối và điều khiển SQLite database
- firebase_database – được dùng để kết nối và điều khiển NoSQL database từ google
Các bài viết liên quan:
SQLite
SQLite database là một SQL tiêu chuẩn chuẩn dành cho hệ thống nhúng. Nó là một database engine nhỏ và nhanh, sqflite package cung cấp cho ta rất nhiều chức năng để làm việc hiệu quả với SQLite database. Nó cung cấp các hàm tiêu chuẩn cho việc điều khiển SQLite database. Các chức năng cốt lỗi được cung cấp bởi sqflite package như sau:
- Tạo/mở (openDatabase) một SQLite database
- Thực hiện statement trong (hàm execute) SQLite database
- Các truy vấn nâng cao (hàm query) để giảm thiểu code cần thiết để truy vấn và lấy thông tin từ SQLite database
- Giờ ta cùng tạo một ứng dụng product để lưu trữ và lấy thông tin product từ một SQLite database tiêu chuẩn sử dụng sqflite package và hiểu khái niệm đằng sau SQLite database và sqflite package.
Ví dụ sử dụng SQLite trong Flutter
Tạo một ứng dụng Flutter mới với tên là sqlite_app
Ta mở Visual Studio Code và mở thư mục đó như sau: File -> open folder và chọn thư mục đã tạo project
Thêm package sqflite và path_provider vào trong pubspec.yaml
path_provider được dùng để lấy đường dẫn thư mục tạm của hệ thống và đường dẫn của ứng dụng.
save file pubspec.yaml và hệ thống sẽ tự động cập nhật và cài đặt các package ta vừa thêm vào.
Xem thêm Cấu trúc ứng dụng Flutter
Trong database, ta cần khóa chính, id như một trường bổ sung song song với các thuộc tính của Sinh Viên như name. Vì thế ta thêm thuộc tính id vào trong class sinhvien.dart. Ngoài ra ta cần thêm một hàm mới là toMap để chuyển đối tượng product sang đối tượng Map, fromMap và toMap được dùng để mã hóa và giải mã đối tượng sinhvien và nó được sử dụng trong các hàm điều khiển database.
Tạo file mới là db_helper.dart trong thư mục lib và viết các chức năng liên quan tới SQLite
import các thư viện vào trong Database.dart
- async được dùng để viết các hàm bất đồng bộ
- io được dùng để kết nối file và thư mục
- path được dùng để kết nối các hàm lõi trong dart liên kết với đường dẫn file
- path_provider được sử dụng để lấy đường dẫn tạm và đường dẫn cửa ứng dụng.
- sqflite được sử dụng để điều khiển SQlite database
Tạo một class mới là DBHelper
Tạo một đối tượng static Database singleton như sau:
- Đối tượng DBHelper và các hàm của nó có thể được sử dụng thông qua biến private db static
- Các hằng số theo dang String như ID, NAME, TABLE, DB_NAME là dùng để cung cấp các đối số cho các hàm CRUD về sai
- Tạo một hàm để lấy database (Future) theo dạng Future<Database>. Tạo bảng SinhVien và load dữ liệu ban đầu trong quá trình tạo mới database
- getApplicationDocumentsDirectory – trả về đường dẫn thư mục của ứng dụng
- join – được sử dụng để tạo đường dẫn cụ thể trong hệ thống, Chúng ta sử dụng nó để tạo đường dẫn đến database
- openDatabase – được dùng để mở SQLite database
- onCreate – được sử dụng để viết code trong khi database được tạo lần đầu tiên
- db.execute – được sử dụng để thực hiện câu lệnh truy vấn, nó yêu cầu một câu truy vấn. Nếu câu truy vấn có placeholder thì nó sẽ lấy giá trị theo dạng list trong biến số thứ 2
Viết hàm lấy tất cả sinh viên trong database
Sử dụng hàm query để lấy tất cả thông tin sinh viên, query cung cấp một đường tắt để truy vấn một thông tin một bảng mà không cần viết cả câu lệnh query. Hàm query sẽ tự tạo một câu truy vấn bằng cách sử dụng input như columns, oderBy, v.v…
Sử dụng hàm fromMap của SinhVien để lấy chi tiết sản phẩm bằng cách lập đi lập lại các kết quả của đối tượng chứa tất cả các dòng trong bảng
Viết một hàm để lưu lại SinhVien
Tạo 3 hàm là insert, delete và update
Hàm save sẽ lưu một sinh viên vào trong database, bằng cách sử dụng hàm insert, đối số truyền vào là tên bảng và đối tượng dạng Map.
hàm delete sẽ xóa một sinh viên trong database, bằng cách sử dụng hàm delete, đối số truyền vào là tên bảng (TABLE), điều kiện và giá trị của điều kiện đó.
Xem thêm Function trong R, các hàm trong R
Hàm update sẽ cập nhật một sinh viên trong database, bằng cách sử dụng hàm update, đối số truyền vào sẽ là tên bảng, đối tượng dạng Map, điều kiện và giá trị của điều kiện.
Kết quả khi chạy ứng dụng và thêm sinh viên