flutter中sqflite基本使用與注意點

前言

移動端數(shù)據(jù)庫雖然不是特別常用,但肯定也是無法避免需要使用的,比如私聊聊天記錄,比如歷史記錄,比如消息提醒等,flutter 你可以自建plugin,也可以使用三方的,本篇介紹的就是pub.dev中目前數(shù)據(jù)庫使用排名第一的 sqflite,本文只是對 sqflite 的嘗試,不對 sql 條件查詢做過多的講解.


sqlite 支持iOS,Android,MacOS

基礎(chǔ)API 暫時先不講解了,直接上代碼,先用

1.把數(shù)據(jù)庫抽成單例

static DBHelper get to => Get.find();

2.開啟數(shù)據(jù)庫

在用戶登錄成功后,及用戶快速登錄(從緩存中)成功后,開啟數(shù)據(jù)庫,(用戶 id 做數(shù)據(jù)庫,做用戶數(shù)據(jù)隔離.)

open() async {
    if (!UserStore.to.isLogin) {
      return;
    }
    if (_db != null) {
      if (_db?.path.contains("${UserStore.current?.userId ?? 0}") ?? false) {
        // 如果_db 不為空,且與當前用戶一致
        return;
      } else {
        _db?.close();
      }
    }
    final sqlFileName = "${UserStore.to.userId}.db";
    final path = "${await getDatabasesPath()}/$sqlFileName";
    print("~~~sql:$path");
    _db = await openDatabase(path, version: 3,
        onCreate: (Database db, int version) {
      db.execute("""
      CREATE TABLE If NOT EXISTS $_chatMessage (
        "id"    INTEGER NOT NULL,
        "userId"    INTEGER NOT NULL,
        "nickname"  TEXT,
        "content"   TEXT,
        PRIMARY KEY("id" AUTOINCREMENT)
      );
      """);
    }

3. 模擬器中數(shù)據(jù)庫地址

/Users/suyikun/Library/Developer/CoreSimulator/Devices/0FE2E5FD-68AA-475D-841C-9D1DCE490F95/data/Containers/Data/Application/5B54CA08-BD78-4E54-A757-A18E8A29ACBA/Documents/200954533.db


4.插入數(shù)據(jù)

數(shù)據(jù)庫操作 API 也算是十分簡單 清晰了,具體大家真的用的時候直接看api就行了
Future<int> insert(Map<String, dynamic>? map) async {
    if (_db == null) {
      return Future.value(0);
    }
    if (map == null) {
      return Future.value(0);
    }
    int result = await _db!.insert(_chatMessage, map);
    return result;
  }

5.查詢數(shù)據(jù)

查詢提供了兩種,一種是 sqlite 幫你拼接參數(shù),一種是自己手寫 sql 語句


反正底層都是走的_rawQuery(builder.sql, builder.arguments);,反正至少你得會基礎(chǔ)的 sql 查詢,分頁,排序,條件查詢等等.

Future<List<Map<String, dynamic>>> queryAll() async {
    if (_db == null) {
      return Future.value([]);
    }

    List<Map<String, dynamic>> list =
        await _db!.rawQuery("select * from $_chatMessage");
    return list;
  }

對應的數(shù)據(jù)庫中數(shù)據(jù)



查詢條件這個沒啥好講的,查詢條件因人而已.只要你會mysql 即可.

升級數(shù)據(jù)庫

十分不建議大量使用業(yè)務(wù)字段建立數(shù)據(jù)庫字段,不要給自己和后來人挖抗.升級數(shù)據(jù)庫在下圖中展示,sqflite 升級數(shù)據(jù)庫十分的麻煩,如果一定要升級,可以嘗試下面我所展示的升級寫法,建議業(yè)務(wù)中的數(shù)據(jù)結(jié)構(gòu),全部放在一個 text 字段中,比如 ext,做編解碼成字符串處理數(shù)據(jù).數(shù)據(jù)庫字段只做必要的幾個字段,比如 type,status,userId,create_time,update_time,sort 等等用于區(qū)分記錄的字段,



升級完展示




sqflite 使用下來,就是這個升級太過麻煩,realm更改表結(jié)構(gòu)比sqlite 簡單的多,所以比較好更改表結(jié)構(gòu),但是,目前碰到的問題都是有辦法解決的,多端的數(shù)據(jù)庫實現(xiàn)>>>sqlite所支持的困難.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兔辅,一起剝皮案震驚了整個濱河市慷吊,隨后出現(xiàn)的幾起案子划提,更是在濱河造成了極大的恐慌,老刑警劉巖睛低,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡曲稼,警方通過查閱死者的電腦和手機榴都,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門待锈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘴高,你說我怎么就攤上這事竿音『褪海” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵春瞬,是天一觀的道長柴信。 經(jīng)常有香客問我,道長快鱼,這世上最難降的妖魔是什么颠印? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮抹竹,結(jié)果婚禮上线罕,老公的妹妹穿的比我還像新娘。我一直安慰自己窃判,他們只是感情好钞楼,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袄琳,像睡著了一般询件。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唆樊,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天宛琅,我揣著相機與錄音,去河邊找鬼逗旁。 笑死嘿辟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的片效。 我是一名探鬼主播红伦,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淀衣!你這毒婦竟也來了昙读?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膨桥,失蹤者是張志新(化名)和其女友劉穎蛮浑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體只嚣,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡陵吸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了介牙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壮虫。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出囚似,到底是詐尸還是另有隱情剩拢,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布饶唤,位于F島的核電站徐伐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏募狂。R本人自食惡果不足惜办素,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祸穷。 院中可真熱鬧性穿,春花似錦、人聲如沸雷滚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祈远。三九已至呆万,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間车份,已是汗流浹背谋减。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扫沼,地道東北人逃顶。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像充甚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霸褒,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容