Flutter SqlLite數(shù)據(jù)庫快速入門

一假瞬、前言

光陰荏苒义郑,轉眼間2019年快過去一大半了!Flutter也從年初的1.2正式版到現(xiàn)在的1.5正式版杈曲,并且4月底谷歌IO大會宣布Flutter支持WEB端開發(fā)嵌入式開發(fā)驰凛,至此F已經支持全端開發(fā)了,這足以看到谷歌對這框架的投入担扑;是時候花時間去學習與歸納Flutter知識了恰响!

二、sqflite插件

sqflite基于Sqlite開發(fā)的一款flutter插件涌献,其支持iOS和Android胚宦,

GitHub地址:https://github.com/tekartik/sqflite

三、集成使用

(1).導入sqflite插件庫:

在pubspec.yaml文件中添加sqflite,當前版本1.1.5:

sqflite: ^1.1.5

在dart類中引入:

import 'package:sqflite/sqflite.dart';

(2).創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表:

在創(chuàng)建數(shù)據(jù)庫前枢劝,需要設置創(chuàng)建數(shù)據(jù)庫的路徑:

//獲取數(shù)據(jù)庫路徑
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, dbName);

創(chuàng)建數(shù)據(jù)庫井联、數(shù)據(jù)庫表:

await openDatabase(
        path,
        version:vers,
        onUpgrade: (Database db, int oldVersion, int newVersion) async{
          //數(shù)據(jù)庫升級,只回調一次
          print("數(shù)據(jù)庫需要升級!舊版:$oldVersion,新版:$newVersion");
        },
        onCreate: (Database db, int vers) async{
          //創(chuàng)建表您旁,只回調一次
          await db.execute(dbTables);
          await db.close();

        }
    );

image.gif

openDatabase方法是用來初始化數(shù)據(jù)庫的烙常,里面有數(shù)據(jù)庫的路徑、版本鹤盒,版本是用來區(qū)別新舊數(shù)據(jù)庫的蚕脏,如表的結構需要發(fā)生變化,則需要提高版本進行數(shù)據(jù)庫升級侦锯,這是將會回調onUpgrade方法蝗锥,我們需要在這方法里編寫版本升級的邏輯。onCreate方法是創(chuàng)建數(shù)據(jù)庫時回調的方法率触,只執(zhí)行一次,因此我們需要在這里創(chuàng)建數(shù)據(jù)庫表汇竭。

(3).增:

即插入數(shù)據(jù)操作葱蝗,查看官方源碼:

 /// Execute a raw SQL INSERT query
  ///
  /// Returns the last inserted record id
  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中是想要添加的字段名和對應字段值玻驻。

(4).刪:

即刪除數(shù)據(jù)操作悼凑,查看官方源碼:

Future<int> rawDelete(String sql, [List<dynamic> arguments]);

  /// Convenience method for deleting rows in the database.
  ///
  /// Delete from [table]
  ///
  /// [where] is the optional WHERE clause to apply when updating. Passing null
  /// will update all rows.
  ///
  /// You may include ?s in the where clause, which will be replaced by the
  /// values from [whereArgs]
  ///
  /// [conflictAlgorithm] (optional) specifies algorithm to use in case of a
  /// conflict. See [ConflictResolver] docs for more details
  ///
  /// Returns the number of rows affected if a whereClause is passed in, 0
  /// otherwise. To remove all rows and get a count pass "1" as the
  /// whereClause.
  Future<int> delete(String table, {String where, List<dynamic> whereArgs});

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

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

(5).改:

即更新數(shù)據(jù)操作,查看官方源碼:

  Future<int> rawUpdate(String sql, [List<dynamic> arguments]);

  /// Convenience method for updating rows in the database.
  ///
  /// Update [table] with [values], a map from column names to new column
  /// values. null is a valid value that will be translated to NULL.
  ///
  /// [where] is the optional WHERE clause to apply when updating.
  /// Passing null will update all rows.
  ///
  /// You may include ?s in the where clause, which will be replaced by the
  /// values from [whereArgs]
  ///
  /// [conflictAlgorithm] (optional) specifies algorithm to use in case of a
  /// conflict. See [ConflictResolver] docs for more details
  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ù)為修改的字段和對應值垫挨,后邊的可選參數(shù)依次表示WHERE子句(可使用?作為占位符)、WHERE子句占位符參數(shù)值触菜、發(fā)生沖突時的操作算法(包括回滾九榔、終止、忽略等等)。

(6).查:

即查詢數(shù)據(jù)操作帚屉,查看官方源碼:

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

  /// Execute a raw SQL SELECT query
  ///
  /// Returns a list of rows that were found
  Future<List<Map<String, dynamic>>> rawQuery(String sql,
      [List<dynamic> arguments]);

query方法第一個參數(shù)為操作的表名谜诫,后面的可選參數(shù)依次表示是否去重、查詢字段攻旦、where子句(可使用?作為占位符)喻旷、where占位符參數(shù)、GROUP BY 牢屋、haveing且预、ORDER BY、查詢的條數(shù)烙无、查詢的偏移位锋谐;

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

學習了基礎后,我簡單寫了個demo迂苛,主要利用SQL語句進行增刪改查操作:

image
image.gif

今天就學習到這里吧三热!

本案例demo地址:
https://github.com/ChessLuo/flutter_data_srorage

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市三幻,隨后出現(xiàn)的幾起案子就漾,更是在濱河造成了極大的恐慌,老刑警劉巖念搬,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抑堡,死亡現(xiàn)場離奇詭異,居然都是意外死亡朗徊,警方通過查閱死者的電腦和手機首妖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荣倾,“玉大人悯搔,你說我怎么就攤上這事∩嗳裕” “怎么了妒貌?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铸豁。 經常有香客問我灌曙,道長,這世上最難降的妖魔是什么节芥? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任在刺,我火速辦了婚禮逆害,結果婚禮上,老公的妹妹穿的比我還像新娘蚣驼。我一直安慰自己魄幕,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布颖杏。 她就那樣靜靜地躺著纯陨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪留储。 梳的紋絲不亂的頭發(fā)上翼抠,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音获讳,去河邊找鬼映挂。 笑死朝扼,一個胖子當著我的面吹牛酒请,可吹牛的內容都是我干的淫半。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帅矗,長吁一口氣:“原來是場噩夢啊……” “哼侠畔!你這毒婦竟也來了?” 一聲冷哼從身側響起损晤,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎红竭,沒想到半個月后尤勋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡茵宪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年最冰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稀火。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡暖哨,死狀恐怖,靈堂內的尸體忽然破棺而出凰狞,到底是詐尸還是另有隱情篇裁,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布赡若,位于F島的核電站达布,受9級特大地震影響,放射性物質發(fā)生泄漏逾冬。R本人自食惡果不足惜黍聂,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一躺苦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧产还,春花似錦匹厘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坡椒,卻和暖如春扰路,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倔叼。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工汗唱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丈攒。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓哩罪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親巡验。 傳聞我的和親對象是個殘疾皇子际插,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容