日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 系統(tǒng) > Android > 正文

Flutter持久化存儲之數(shù)據(jù)庫存儲(sqflite)詳解

2019-10-21 21:19:24
字體:
供稿:網(wǎng)友

前言

數(shù)據(jù)庫存儲是我們常用的存儲方式之一,對大批量數(shù)據(jù)有增、刪、改、查操作需求時,我們就會想到使用數(shù)據(jù)庫,F(xiàn)lutter中提供了一個sqflite插件供我們用于大量數(shù)據(jù)執(zhí)行CRUD操作。本篇我們就來一起學(xué)習(xí)sqflite的使用。

sqflite是一款輕量級的關(guān)系型數(shù)據(jù)庫,類似SQLite。

在Flutter平臺我們使用sqflite庫來同時支持Android 和iOS。

sqflite使用

引入插件

在pubspec.yaml文件中添加path_provider插件,最新版本為1.0.0,如下:

dependencies: flutter: sdk: flutter #sqflite插件 sqflite: 1.0.0

然后命令行執(zhí)行flutter packages get即可將插件下載到本地。

數(shù)據(jù)庫操作方法介紹

1. 插入操作

插入數(shù)據(jù)操作有兩個方法:

Future<int> rawInsert(String sql, [List<dynamic> arguments]);Future<int> insert(String table, Map<String, dynamic> values, {String nullColumnHack, ConflictAlgorithm conflictAlgorithm});

rawInsert方法第一個參數(shù)為一條插入sql語句,可以使用?作為占位符,通過第二個參數(shù)填充數(shù)據(jù)。

insert方法第一個參數(shù)為操作的表名,第二個參數(shù)map中是想要添加的字段名和對應(yīng)字段值。

2. 查詢操作

查詢操作同樣實現(xiàn)了兩個方法:

Future<List<Map<String, dynamic>>> query(String table, {bool distinct, List<String> columns, String where, List<dynamic> whereArgs, String groupBy, String having, String orderBy, int limit, int offset}); Future<List<Map<String, dynamic>>> rawQuery(String sql, [List<dynamic> arguments]);

query方法第一個參數(shù)為操作的表名,后邊的可選參數(shù)依次表示是否去重、查詢字段、WHERE子句(可使用?作為占位符)、WHERE子句占位符參數(shù)值、GROUP BY子句、HAVING子句、ORDER BY子句、查詢的條數(shù)、查詢的偏移位等。

rawQuery方法第一個參數(shù)為一條查詢sql語句,可以使用?作為占位符,通過第二個參數(shù)填充數(shù)據(jù)。

3. 修改操作

修改操作同樣實現(xiàn)了兩個方法:

Future<int> rawUpdate(String sql, [List<dynamic> arguments]);Future<int> update(String table, Map<String, dynamic> values, {String where, List<dynamic> whereArgs, ConflictAlgorithm conflictAlgorithm});

rawUpdate方法第一個參數(shù)為一條更新sql語句,可以使用?作為占位符,通過第二個參數(shù)填充數(shù)據(jù)。

update方法第一個參數(shù)為操作的表名,第二個參數(shù)為修改的字段和對應(yīng)值,后邊的可選參數(shù)依次表示W(wǎng)HERE子句(可使用?作為占位符)、WHERE子句占位符參數(shù)值、發(fā)生沖突時的操作算法(包括回滾、終止、忽略等等)。

4. 刪除操作

修改操作同樣實現(xiàn)了兩個方法:

Future<int> rawDelete(String sql, [List<dynamic> arguments]);Future<int> delete(String table, {String where, List<dynamic> whereArgs});

rawDelete方法第一個參數(shù)為一條刪除sql語句,可以使用?作為占位符,通過第二個參數(shù)填充數(shù)據(jù)。

delete方法第一個參數(shù)為操作的表名,后邊的可選參數(shù)依次表示W(wǎng)HERE子句(可使用?作為占位符)、WHERE子句占位符參數(shù)值。

舉個栗子

我們以圖書管理系統(tǒng)來舉例。

首先,我們創(chuàng)建一個書籍類,包括書籍ID、書名、作者、價格、出版社等信息。

final String tableBook = 'book';final String columnId = '_id';final String columnName = 'name';final String columnAuthor = 'author';final String columnPrice = 'price';final String columnPublishingHouse = 'publishingHouse';class Book { int id; String name; String author; double price; String publishingHouse;  Map<String, dynamic> toMap() { var map = <String, dynamic>{ columnName: name, columnAuthor: author, columnPrice: price, columnPublishingHouse: publishingHouse }; if (id != null) { map[columnId] = id; } return map; } Book(); Book.fromMap(Map<String, dynamic> map) { id = map[columnId]; name = map[columnName]; author = map[columnAuthor]; price = map[columnPrice]; publishingHouse = map[columnPublishingHouse]; }}

其次,我們開始實現(xiàn)數(shù)據(jù)庫相關(guān)操作:

1. 創(chuàng)建數(shù)據(jù)庫文件和對應(yīng)的表

// 獲取數(shù)據(jù)庫文件的存儲路徑 var databasesPath = await getDatabasesPath(); String path = join(databasesPath, 'demo.db');//根據(jù)數(shù)據(jù)庫文件路徑和數(shù)據(jù)庫版本號創(chuàng)建數(shù)據(jù)庫表 db = await openDatabase(path, version: 1, onCreate: (Database db, int version) async { await db.execute('''  CREATE TABLE $tableBook (  $columnId INTEGER PRIMARY KEY,   $columnName TEXT,   $columnAuthor TEXT,   $columnPrice REAL,   $columnPublishingHouse TEXT)  '''); });

2. CRUD操作實現(xiàn)

 // 插入一條書籍數(shù)據(jù) Future<Book> insert(Book book) async { book.id = await db.insert(tableBook, book.toMap()); return book; } // 查找所有書籍信息 Future<List<Book>> queryAll() async { List<Map> maps = await db.query(tableBook, columns: [ columnId, columnName, columnAuthor, columnPrice, columnPublishingHouse ]); if (maps == null || maps.length == 0) { return null; } List<Book> books = []; for (int i = 0; i < maps.length; i++) { books.add(Book.fromMap(maps[i])); } return books; } // 根據(jù)ID查找書籍信息 Future<Book> getBook(int id) async { List<Map> maps = await db.query(tableBook, columns: [  columnId,  columnName,  columnAuthor,  columnPrice,  columnPublishingHouse ], where: '$columnId = ?', whereArgs: [id]); if (maps.length > 0) { return Book.fromMap(maps.first); } return null; } // 根據(jù)ID刪除書籍信息 Future<int> delete(int id) async { return await db.delete(tableBook, where: '$columnId = ?', whereArgs: [id]); } // 更新書籍信息 Future<int> update(Book book) async { return await db.update(tableBook, book.toMap(), where: '$columnId = ?', whereArgs: [book.id]); }

3. 關(guān)閉數(shù)據(jù)庫

數(shù)據(jù)庫對象使用完之后要在適當?shù)臅r候關(guān)閉掉,可在helper類中實現(xiàn)以下方法。

Future close() async => db.close();

事務(wù)

sqflite同時支持事務(wù),通過事務(wù)可以將多條原子操作放在一起執(zhí)行,保證操作要么全部執(zhí)行完成,要么都不執(zhí)行。
比如有兩條書籍數(shù)據(jù)必須全部插入書庫中才算添加成功,則使用如下方法

 Future<bool> insertTwoBook(Book book1, Book book2) async { return await db.transaction((Transaction txn) async { book1.id = await db.insert(tableBook, book1.toMap()); book2.id = await db.insert(tableBook, book2.toMap()); print('book1.id = ${book1.id}, book2.id = ${book2.id}'); return book1.id != null && book2.id != null; }); }

寫在最后

以上介紹了sqflite中我們常用的幾個操作,有了sqflite我們就可以開發(fā)更豐富的應(yīng)用程序,在開發(fā)實踐中大家遇到任何問題都可以給我們發(fā)消息反饋,大家一起交流探討共同進步。針對一些用戶的反饋我們將在下一篇介紹Flutter的代碼調(diào)試。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
一区二区三区免费看视频| 精品全国在线一区二区| 午夜视频在线观看一区| 日韩精品一页| 国产网站av| 欧美激情视频一区二区三区在线播放 | 欧美日韩一二| 1区2区在线| 亚洲va中文字幕| 国产91久久久久蜜臀青青天草二 | 91精品国产综合久久久久久| 欧美日韩在线观看首页| 国产在线小视频| 99久久婷婷| 欧美色视频一区二区三区在线观看 | 麻豆一区二区99久久久久| 亚洲素人一区二区| 欧美专区中文字幕| 亚洲一区二区三区精品中文字幕| 国产欧美中文在线| 国产卡1卡2卡三卡在线| 中文字幕欧美在线| av丝袜在线| 欧美日韩亚洲天堂| 欧美日韩亚洲91| 国产香蕉免费精品视频| 日韩视频精品| 欧美另类久久久品| 日韩精品一级| 一级国产黄色片| 国产黄色在线免费观看| 国产视频1区2区| 婷婷久久综合网| 国产对白在线| 中文字幕2020第一页| 中文官网资源新版中文第二页在线观看 | 中文字幕在线观看播放| 又黄又www的网站| 国产 欧美 日韩 在线| 国产亚洲一级| 三级网站免费观看| 日韩欧美成人一区二区三区| 国产又粗又猛又爽又黄91精品| 日韩在线不卡| 国产日韩三级| 日本黄色一区二区| 中文字幕无线码一区| 欧美日韩在线视频免费观看 | 日韩在线视频一区二区三区| 一区免费视频| 国产偷久久久精品专区| 欧美日韩在线国产| 在线观看一区日韩| 精品一区二区三区中文字幕在线| 亚洲乱码中文字幕综合| 国产一区三区三区| 九九精品调教| 日韩不卡高清视频| 日韩精品在线看| wwwav在线播放| 国产偷国产偷亚洲清高网站 | 日韩一级在线视频| 久久99精品国产| 二区三区中文字幕| 91精品在线视频观看| 欧美中文字幕视频| 久久久综合av| 国产在线中文字幕| 欧洲一级精品| 色猫猫国产区一区二在线视频| 欧美日韩中文字幕在线| 中文字幕在线观看国产| 日韩三级高清在线| 欧美黄页在线免费观看| 在线黄色国产电影| 国产一区精品在线| 国产一二三精品| 久久久久久欧美| 亚洲视频色图| 亚洲欧洲精品在线| 日韩在线视频免费观看高清中文| 中文字幕在线视频久| 日韩欧美综合| 国产黄色片中文字幕| 在线日韩欧美| 日韩免费高清一区二区| 黄色国产网站在线播放| 日韩欧美资源站| 国产高清一级片| 中文字幕在线观看播放| 亚洲欧美久久久| 日韩欧美中文在线视频| 国产中文在线观看| 成人一区而且| 蜜桃久久av| 国产一级在线| 国产在线精品国自产拍免费| 视频一区二区不卡| 日韩中文在线视频| 日韩精品资源二区在线| 亚洲欧洲在线观看av| 日韩欧美亚洲国产一区| 欧美片网站免费| a视频在线播放| 欧美日韩在线精品成人综合网| 国产一区激情在线| 欧美日韩在线视频一区| 亚洲综合三区| 精品国产99| 国产调教精品| 日韩亚洲不卡在线| 中文字幕国产在线| 欧美中文字幕在线视频| 日本熟女一区二区| 精品网站999www| 91精品国产手机| 日韩欧美中文在线视频| 日韩视频在线一区二区三区| 欧美人妻一区二区三区| 亚洲一区日韩在线| 国产婷婷一区二区| 亚洲成年网站在线观看| 尤物av一区二区| 欧美黄页在线免费观看| 91色在线看| 日韩久久精品网| 国内精品99| 在线观看国产一级片| 国产在线日韩欧美| 国产欧美自拍一区| 精品久久久久久综合日本欧美| 一本一道综合狠狠老| 日本黄色一区二区三区| 欧美日韩精品在线视频| 在线视频你懂得一区| 中文精品视频| 国产乱国产乱老熟300部视频| 久久精品卡一| 国产欧美日韩91| 国产在线高清精品| 欧美啪啪一区| 亚洲视频日韩| 欧美日韩在线精品成人综合网| 国产一区不卡精品| 日韩国产欧美三级| 日韩久久精品成人| 欧美日韩国产观看视频| 亚洲3区在线| 在线观看免费国产小视频| 免费在线亚洲| 精品三级av| 亚洲一级在线| 日韩欧美99| 中文 欧美 日韩| 国产婷婷在线观看| 九九视频精品免费| 久久精品蜜桃| 日韩高清在线不卡| 久久精品在线观看| 深夜福利亚洲| 欧美日韩激情一区| 日本亚洲视频在线| 亚洲三级av| 色www精品视频在线观看| 国产黄色在线观看| 日韩视频不卡中文| 激情久久99| 国产999精品在线观看| 国产福利精品导航| 亚洲一卡二卡在线观看| 国产高清在线视频| 伊人亚洲视频| 天天综合色天天| 精品一区二区在线观看视频| 日韩精品三级| 91一区二区| 在线不卡一区二区| 91麻豆精品在线| av免费在线不卡| 91精品国产91久久久久青草| 欧美午夜精品在线| www日韩欧美| 国产一二三视频| 中文精品电影| 国产字幕中文| 日韩欧美在线综合网| 一区二区欧美国产| 久久久久久99精品| 亚洲一级在线| 日韩一级二级三级精品视频| 免费在线亚洲| 日韩精品福利一区二区三区| 欧美日韩综合高清一区二区| 国产免费电影网站入口| 精品亚洲永久免费| 91欧美日韩在线| 一区二区欧美国产| 精品国产乱码久久久久久牛牛| 久久久精品国产99久久精品芒果| 欧美日韩在线观看成人| 国产在线导航| 77777_亚洲午夜久久多人 | 国内精品露脸在线视频播放| 欧美日韩激情一区| 国产高清精品在线| 天堂在线中文资源| 中文字幕视频在线免费欧美日韩综合在线看 | 国产在线观看黄色| 国产丝袜欧美中文另类| 欧美亚洲国产日韩| 国产欧美久久久| 日韩一级二级三级精品视频| 国产黄色在线播放| 国产在线视频不卡| 日韩中文字幕精品视频| 日本国产在线视频| 日韩国产一区| 欧美三级中文字幕在线观看| 亚洲视频一二三四| 亚洲视频在线观看日本a| av一级在线| 在线国产1区| 国产一区在线不卡| 日韩欧美不卡| 日韩精品福利视频| 日韩欧美一级在线播放| lutube成人福利在线观看| 国产三级中文字幕| 国产黄在线观看| 国产三级在线| 亚洲免费观看视频| 99精品一级欧美片免费播放| 欧美日韩午夜精品| 欧美二区在线观看| 青青久在线视频免费观看| 久久99久久久久久久噜噜| 国产视频不卡| 在线视频不卡国产V| 欧美日韩精品免费在线观看视频| 国产一卡二卡3卡4卡四卡在线| 国产在线小视频| 亚洲日本欧美日韩高观看| 91吃瓜在线观看| 精品福利在线观看| 国产一区成人| av不卡免费看| 亚洲欧美韩国综合色| 日韩专区中文字幕| 午夜福利一区二区三区| 国产aa精品| 日韩中文字幕第一页| 欧美日韩中文字幕在线观看| 天天综合天天综合| 国产www.大片在线| 欧美在线亚洲一区| 日本va欧美va精品发布| 日韩中文字幕在线一区| 中文字幕在线高清| 亚洲区中文字幕| 中文在线а√在线8| 黄色一区二区在线| 日韩中文字幕二区| 在线视频你懂得一区| 日韩国产在线观看一区| 国产999在线观看| 91精品久久久久| 日韩一级视频在线观看| 国产视频97| 一级片免费网站| 日韩精品在线免费观看视频| 中文字幕日韩欧美在线| 亚洲综合视频一区| 91九色在线播放| 97国产视频| 91久久精品视频| 精品久久久三级| 日韩不卡高清视频| a视频免费看| 蜜桃视频一日韩欧美专区| 国产成人精品免费久久久久| 中文字幕亚洲免费| 中文字幕亚洲高清| 中文字幕欧美人妻精品一区蜜臀 | 一区二区视频在线| 在线视频三区| 免费中文字幕日韩欧美| 国自产拍在线网站网址视频| 国产欧美久久久久久久久| 日韩欧美一级在线播放| 91精品国产综合久久香蕉最新版 | 99色在线视频| 日韩精品视频中文在线观看| 91精品国产自产91精品| 日本不卡视频一区| 欧美日韩高清不卡| 一区二区三区免费看视频 | 国产黄色一区| 69免费视频| 国产乱码午夜在线视频| 亚洲视频日韩| 国产黄色精品| 日韩视频在线一区二区三区| 精品视频123区在线观看| 日韩欧美一级视频| 国产在线视频一区二区| 日本国产一区| 一区二区不卡视频在线观看| 一级一片免费视频| 中文字幕日韩国产| 欧美国产综合视频| 亚洲国产综合久久| 黄色国产在线| 91精品国产色综合久久久蜜香臀 | 91精品国产高清久久久久久| 日韩欧美成人一区二区三区| 一区二区不卡在线播放| 国产欧美日韩综合| 成年人黄国产| 欧美日韩精品综合在线| 国产羞羞视频在线播放| 日韩.com| 亚洲乱码一区av黑人高潮| 91精品国产综合久久香蕉最新版| 国产最新在线| 国产高清不卡av| 在线视频1区2区| 本道综合精品| 天天综合天天| 视频一区不卡| 欧美日韩国产高清| 最新中文字幕在线| 中文字幕国产亚洲| 亚洲黄在线观看| 欧美日韩中文字幕在线| 国产一级在线免费观看| 日韩欧美一级精品久久| 色综合久久六月婷婷中文字幕| 999精品色在线播放| 先锋男人资源站| 欧美日韩中文字幕一区| 在线观看国产一区| 中文亚洲欧美| 免费在线播放av| 伊人国产视频| 不卡视频一区二区三区| 色猫猫国产区一区二在线视频| 日韩精品高清不卡| 香蕉视频亚洲一级| 精品国产1区2区3区| 在线欧美日韩精品| 国产午夜精品视频| 欧美日韩精品综合在线| 首页国产欧美久久| 日韩视频在线免费看| 国产日韩三级| 欧美亚洲综合视频| 色欧美日韩亚洲| 欧美激情一区二区三区在线| 国产黄色片大全| 久久精品www| 黄色资源在线观看| 日本精品在线播放| 欧美日韩在线播放一区| 欧美变态tickling挠脚心| 日韩欧美亚洲国产| 欧美日韩高清不卡| 国产字幕中文| 久久香蕉精品| 亚洲高清在线免费| wwwwww在线观看| 中文字幕欧美亚洲| 91国内精品在线视频| 亚洲日产av中文字幕| 中文在线一区二区| 欧美日韩性视频一区二区三区| 欧美不卡视频一区| 欧美国产小视频| 拍真实国产伦偷精品| 中文字幕在线视频第一页| 日韩高清不卡一区二区| 中文字幕精品在线| 欧美日韩一二三| 在线国产一级| 精品区一区二区| 欧美日韩国产中文| 久久精品国产2020观看福利| 91麻豆精品在线| 亚洲女人天堂色在线7777| 日韩欧美中文在线| 中文字幕在线国产| 国产资源在线观看| 国产拍揄自揄精品视频麻豆| 亚洲福利一区二区三区| 中文字幕欧美日韩在线| 日韩精品视频免费看| 日韩国产一区| 日韩精品在线免费观看| 午夜一区二区视频| 99亚洲视频| 91久久精品国产91久久|