亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

Flutter持久化存儲(chǔ)之?dāng)?shù)據(jù)庫(kù)存儲(chǔ)(sqflite)詳解

2019-10-21 21:19:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

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

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

在Flutter平臺(tái)我們使用sqflite庫(kù)來(lái)同時(shí)支持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ù)庫(kù)操作方法介紹

1. 插入操作

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

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

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

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

2. 查詢(xún)操作

查詢(xún)操作同樣實(shí)現(xiàn)了兩個(gè)方法:

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方法第一個(gè)參數(shù)為操作的表名,后邊的可選參數(shù)依次表示是否去重、查詢(xún)字段、WHERE子句(可使用?作為占位符)、WHERE子句占位符參數(shù)值、GROUP BY子句、HAVING子句、ORDER BY子句、查詢(xún)的條數(shù)、查詢(xún)的偏移位等。

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

3. 修改操作

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

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方法第一個(gè)參數(shù)為一條更新sql語(yǔ)句,可以使用?作為占位符,通過(guò)第二個(gè)參數(shù)填充數(shù)據(jù)。

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

4. 刪除操作

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

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

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

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

舉個(gè)栗子

我們以圖書(shū)管理系統(tǒng)來(lái)舉例。

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

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]; }}

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

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

// 獲取數(shù)據(jù)庫(kù)文件的存儲(chǔ)路徑 var databasesPath = await getDatabasesPath(); String path = join(databasesPath, 'demo.db');//根據(jù)數(shù)據(jù)庫(kù)文件路徑和數(shù)據(jù)庫(kù)版本號(hào)創(chuàng)建數(shù)據(jù)庫(kù)表 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操作實(shí)現(xiàn)

 // 插入一條書(shū)籍?dāng)?shù)據(jù) Future<Book> insert(Book book) async { book.id = await db.insert(tableBook, book.toMap()); return book; } // 查找所有書(shū)籍信息 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查找書(shū)籍信息 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刪除書(shū)籍信息 Future<int> delete(int id) async { return await db.delete(tableBook, where: '$columnId = ?', whereArgs: [id]); } // 更新書(shū)籍信息 Future<int> update(Book book) async { return await db.update(tableBook, book.toMap(), where: '$columnId = ?', whereArgs: [book.id]); }

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

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

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

事務(wù)

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

 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; }); }

寫(xiě)在最后

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

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日日狠狠久久偷偷四色综合免费| 成人福利免费网站| 在线国产电影不卡| 日日噜噜夜夜狠狠久久丁香五月| 九七影院97影院理论片久久| 亚洲精品免费在线看| av电影天堂一区二区在线| 国产香蕉97碰碰久久人人| 色欲久久久天天天综合网| 中文字幕在线高清| 国产不卡av在线| 懂色av一区二区三区免费看| 国产原创av在线| 日韩久久免费电影| 朝桐光av在线| 免费黄色成人| 可以免费看毛片的网站| 亚洲国产aⅴ精品一区二区三区| 手机在线理论片| 日韩三级一区二区| 国产精品色一区二区三区| 又粗又黑又大的吊av| 欧美高清免费| 欧美综合欧美视频| 成人免费在线电影网| 婷婷丁香一区二区三区| 精品无码一区二区三区爱欲| 男女啪啪免费视频网站| 国产jizz18女人高潮| 成人啪啪免费看| 卡通动漫精品一区二区三区| 中文字幕av免费观看| 91精品国产自产观看在线| 三年中文高清在线观看第6集| 日韩不卡一区二区| 亚洲国产精品综合久久久| 欧美黄网免费在线观看| 国产精品pans私拍| 欧美啪啪小视频| 日韩一二在线观看| 夜级特黄日本大片_在线| 内射毛片内射国产夫妻| 国产chinesehd精品露脸| 午夜福利理论片在线观看| 亚洲午夜未满十八勿入免费观看全集| 男女下面一进一出无遮挡| 欧美一区永久视频免费观看| 超碰91在线| 无人在线观看的免费高清视频| 免费看污片网站| 2024最新电影在线免费观看| 色婷婷激情一区二区三区| 国产69精品久久久久久久| 日韩乱码人妻无码中文字幕| 亚洲精品第一页| 国产精品av久久久久久无| 一个色妞综合视频在线观看| 免费视频91| 欧美精品性视频| 亚洲欧美精品一区二区三区| 国产巨乳在线观看| 日韩精品一区二区三区老鸭窝| 国产视频精品一区二区三区| 久久久之久亚州精品露出| 夜夜夜精品看看| 国产资源一区| 男人网站在线观看| 一区二区三区**美女毛片| 高清电影一区| 国产精品影视天天线| 亚洲欧美日韩成人高清在线一区| 嫩草影视亚洲| 精品国产自在精品国产浪潮| 国产一区二区免费在线观看| 日韩精品成人在线| 视频在线亚洲| 精品亚洲国产视频| 亚洲国产精品久久久久婷蜜芽| 成人一二三区视频| 色狠狠一区二区三区香蕉| 亚洲高清三级视频| 欧美日韩国产中文精品字幕自在自线| 热99精品只有里视频最新| 亚洲性生活视频在线观看| 欧美国产日韩精品免费观看| 久久久久久久久久久久久国产精品| 全国男人的天堂天堂网| 日韩国产在线一| 成人免费一区二区三区牛牛| 91超碰在线| 女人18毛片九区毛片在线| 杨幂毛片午夜性生毛片| 亚洲精品一区二区三| 国产精品视频一二| 国产精品一区久久| 久久露脸国产精品| 国产白浆在线| 99国产欧美另类久久久精品| 中文字幕久久久久久久| 国产精品国产亚洲精品看不卡15| av在线导航| 久久久久在线视频| 青春草国产成人精品久久| 国产视频久久| 日本免费在线视频不卡一不卡二| 91麻豆精品国产综合久久久久久| 久久免费区一区二区三波多野| 亚洲精品一二三**| 欧美乱大交xxxxx另类| 亚洲免费观看视频| 中文字幕人妻精品一区| 欧美一级欧美三级在线观看| 国产精品1区2区3区在线观看| 制服 丝袜 综合 日韩 欧美| 一区二区免费| 男女啪啪在线观看| 久久精品人人做人人爽97| 亚洲一区二区自拍偷拍| 特级全黄一级毛片| 666av成人影院在线观看| 操人真爽免费视频| 国产精品视频一区二区三区| 国产一区二区99| 亚洲精品tv久久久久久久久| 久热国产在线视频| 午夜精品久久久久久久久久久久久蜜桃| 黄色国产在线视频| 97中文字幕在线| 中文综合在线观看| 国产成人自拍在线| 激情视频网址| 久久爱另类一区二区小说| av电影免费看| 在线观看欧美视频| wwwxx日本| 国产精品视频免费观看www| 精品少妇在线视频| 精品久久久久久中文字幕动漫| 亚洲无吗在线| 136fldh精品导航福利| 亚洲午夜精品在线观看| 国产视频三级在线观看播放| 三级网在线观看| 亚洲av熟女高潮一区二区| 俺去俺来也在线www色官网| 欧美黄色片在线观看| 国产又粗又大又黄| 天天夜碰日日摸日日澡性色av| 黄色小说在线观看视频| 一区二区传媒有限公司| 日韩在线视频网| 草草浮力影院| 国产第一页在线播放| 精品人妻久久久久一区二区三区| 嘿咻视频在线看| 欧美偷拍一区二区| 国产成人精品一区二区三区在线观看| 亚洲国产欧美久久| 欧美日韩国产成人在线| 黄色裸体一级片| 99视频精品视频高清免费| 调教驯服丰满美艳麻麻在线视频| 欧美特黄级在线| 青青操在线观看| 日韩视频免费观看高清| 国产亚洲精品美女| 国产精品福利一区| 亚洲国产欧美91| 久久精品国产亚洲高清剧情介绍| 欧美午夜片欧美片在线观看| 人妻丰满熟妇aⅴ无码| 国产精品字幕| 欧美天天综合色影久久精品| 日韩视频免费中文字幕| 天天干天天玩天天操| 一区二区 亚洲| 99re在线播放| 私库av在线播放| 欧美一区二区精品久久911| 污片在线免费观看| 日本aⅴ亚洲精品中文乱码| 亚洲成人日韩| 欧美偷拍视频| 国产成人在线中文字幕| 九色porny丨精品自拍视频| 蜜桃成人365av| 公肉吊粗大爽色翁浪妇视频| 国产精品黄色在线观看| 久久av综合| 国产无码精品在线播放| 欧美h版在线| 久久久影院免费| 尤物yw午夜国产精品视频明星| 欧美最猛性xxxxx亚洲精品| 少妇愉情理伦片bd| 久久精品精品电影网| 欧美日韩中文精品| 久久国产日韩欧美| 热99精品只有里视频精品| 欧美极品视频一区二区三区| 26uuu日韩精品一区二区| 欧美一区二区三区影院| 黄色三级免费电影| 欧美v亚洲v综合ⅴ国产v| 欧美色图自拍| 内射毛片内射国产夫妻| 99久久激情视频| 亚洲高清不卡在线| 亚洲一级二级| 丁香在线视频| 日本猛少妇色xxxxx免费网站| 精品第一国产综合精品aⅴ| 羞羞影视羞羞在线| 欧美国产日韩另类| 日韩高清不卡在线| 国产噜噜噜噜久久久久久久久| 欧美视频在线观看| 午夜精品久久久久久久四虎美女版| 狼狼综合久久久久综合网| 久久一区二区视频| 亚洲一区二区三区四区五区| 欧美一区二区视频97| 国产一区二区三区四区在线观看| 亚洲熟女乱综合一区二区三区| 免费男女羞羞的视频网站中文字幕妖精视频| 欧美黑人经典片免费观看| 日韩欧美视频在线播放| 婷婷久久青草热一区二区| 国产精品久久久久久久久久久免费看| 亚洲大片免费看| 视频在线99| 99国产精品免费视频观看| 国产精品揄拍100视频| 高清欧美电影在线| 黄色电影免费在线看| 国产情侣在线视频| 国产综合色在线| 国产在线精品不卡| 91久久国产| 国产在线69| 7777精品久久久大香线蕉小说| 一区二区三区影视| 黄色一级大片在线免费观看| 欧美独立站高清久久| 中文字幕少妇一区二区三区| 污视频网站在线看| 亚洲欧美日韩精品在线| 日本三级网站在线观看| 日韩一区二区a片免费观看| 激情欧美一区二区三区在线观看| 调教驯服丰满美艳麻麻在线视频| www.国产| 欧美日韩国产成人在线91| 国产**成人网毛片九色| 丰满人妻一区二区三区无码av| 97国产超碰| 色天天久久综合婷婷女18| 日韩中文字幕在线精品| 宅男噜噜噜66一区二区| 国产一区二区三区免费播放| 国产午夜精品一区二区| 亚洲巨乳在线观看| 亚洲乱码国产乱码精品精的特点| 国产制服91一区二区三区制服| 日韩欧美一级片| 久久女同互慰一区二区三区| 人妻熟女aⅴ一区二区三区汇编| 夜夜操com| gogogo免费高清日本写真| 久久久无码人妻精品无码| a级黄色一级片| 日韩av综合在线观看| 91国偷自产一区二区三区的观看方式| 成人性生交大片免费看视频直播| 97久久精品午夜一区二区| 国产伦精品一区二区三区视频黑人| 免费黄色a网站| 日本黄网站色大片免费观看| 欧美日韩成人免费视频| 成人av一级片| 自拍网站在线观看| 日本丰满少妇黄大片在线观看| 国产熟妇搡bbbb搡bbbb| 国产亚洲第一的欧洲日产| 美女免费黄视频网站| 懂色一区二区三区av片| 国产成人在线网站| 欧美性69xxxx肥| 999热视频| av在线天堂网| 欧美精品在线视频| 日韩午夜激情| 九九热这里有精品视频| 日韩主播视频在线| 黄色的网站在线观看| 91精品国产91久久久久久久久| 亚洲视频在线观看一区二区三区| 九九久久久久久久久激情| 999久久欧美人妻一区二区| 日韩精品视频在线播放| 亚洲图中文字幕| 久久久久美女| 欧美日韩亚洲一区在线观看| 欧美一区二区三区系列电影| 国产伦精品一区二区三区精品| 日本欧美精品久久久| heyzo在线欧美播放| 丰满人妻一区二区三区四区| 成人3d漫画免费无遮挡软件| 亚洲大胆视频| 搡女人真爽免费午夜网站| 欧美成人三级伦在线观看| 亚洲成av人片乱码色午夜| 免费成人在线视频观看| 看黄色录像一级片| 69视频免费在线观看| 久久久无码中文字幕久...| 国产一区二区三区黄网站| 婷婷五月精品中文字幕| 久久久精品国产免费观看同学| 中文字幕亚洲在| 老熟女高潮一区二区三区| 天堂在线观看视频观看www| 毛片久久久久久| 毛片毛片毛片| 蜜桃传媒在线| 欧美日韩免费在线| www.66久久|