flutter - sqlite資料庫小白入門,看不懂打死我

秀嶽lonelyBoy發表於2019-11-14

開始

使用sqflite操作sqlite

sqflite: ^1.1.7+1
複製程式碼

可以先看官方sqlite教程,我覺得寫的還不錯, 比其他中文版的文章教程好多了(壓根看不下去)。(除了我這篇)

官方sqlite教程

初始化db

使用openDatabase初始化

openDatabase語法 Future<Database> openDatabase(String path, {int version, FutureOr<void> Function(Database) onConfigure, FutureOr<void> Function(Database, int) onCreate, FutureOr<void> Function(Database, int, int) onUpgrade, FutureOr<void> Function(Database, int, int) onDowngrade, FutureOr<void> Function(Database) onOpen, bool readOnly = false, bool singleInstance = true})

初始化之前需要先開啟資料庫

2、開啟資料庫

penDatabase(
    join(await getDatabasesPath(), '<資料庫名稱>.db'),
)
複製程式碼

2. 新建表

預設開始是沒有表的,如果直接新建表那麼需要自己搞一個表那麼需要判斷表是否存在。

但是sqflite有onCreate鉤子,首次建立資料庫時,就會執行。

openDatabase(
    join(await getDatabasesPath(), '<資料庫名稱>.db'),
    onCreate: (Database db, int version) async{
        // 新建表
        db.execute(sql語法);
    },
);
複製程式碼

3. 新增版本

openDatabase(
    join(await getDatabasesPath(), '<資料庫名稱>.db'),
    onCreate: (Database db, int version) async{
        // 新建表
        db.execute(sql語法);
    },
    // 版本
    version: 1,
);
複製程式碼

版本的作用是,當版本修改之後onCreate才會執行。

程式碼

import 'dart:io';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

String createSql = '''
  CREATE TABLE <表名稱> (
    id       INTEGER,
    name     STRING,
);
''';
Database db = await openDatabase(
    join(await getDatabasesPath(), '<資料庫名稱>.db'),
    onCreate: (Database db, int version) async{
        // 新建表
        db.execute(createSql);
    },
    version: 1,
);
複製程式碼

這樣就可以拿db使用運算元據庫

運算元據庫

原生操作(以raw開頭),和更適合flutter的操作(適不適合不知道,但是是為了它打造的)

sqflite裡面有一個DatabaseExecutor抽象類,我把所有的操作列出來

// 這部分是原生操作表(raw)
execute
rawInsert
rawDelete
rawUpdate
rawQuery
// 這部分是dart操作表方法
insert
query
update
delete
複製程式碼

原生操作表(raw)

方法

execute
rawInsert
rawDelete
rawUpdate
rawQuery
複製程式碼

flutter - sqlite資料庫小白入門,看不懂打死我
直接寫sqlite語句,第二個可選引數是資料 第二個的資料是代入到sql語句裡面,sql裡面的?

例子

rawInsert(
      'INSERT INTO Test(name) VALUES(?)',
      ['name']
)
複製程式碼

rawInsert、 rawDelete、 rawUpdate、 rawQuery

分別對應增刪改查,那麼新建表,統計資料等等操作怎麼辦?

使用execute。(仔細看你會發現這貨返回值是void,不必慌張,這是正常的)

sqlite語法

如果你不會db語法,沒事,百度或者谷歌學習下。

點選進入 菜鳥教程的sqlite語法

dart操作表

方法

insert
query
update
delete
複製程式碼

例子

insert(
      '<表名>',
      {
          "<欄位名稱>": '<值>'
      },
      conflictAlgorithm: ConflictAlgorithm.replace,
);
複製程式碼
db.query('<表名>')
複製程式碼
update(
      '<表名>',
      // 條件
      where: "id = ?",
      // 值
      whereArgs: [id],
);
複製程式碼
delete(
      '<表名>',
      // 條件
      where: "id = ?",
      // 值
      whereArgs: [id],
);
複製程式碼

關閉

關閉也很重要,記得釋放魔法,不然手機可能頂不住。

這個可不分原生和dart語法了,我們已經脫離操作表的領域啦

await database.close();
複製程式碼

可以把關閉寫到dispose鉤子裡

  @override
  void dispose(){
    database.close();
    super.dispose();
  }
複製程式碼

相關文章