Flutter

Flutter 数据库使用示例

2021-05-27  本文已影响0人  李小轰
时光易老,每天晨跑。今天我们来简单说说Flutter的数据库使用。
abstract class BaseDbProvider {
  //提供上层业务方实现
  String getDbFileName();
  Future<Database> getDb(Database db, int dbVersion) async {
    if (db == null || !db.isOpen) {
      String dbPath = await getDatabasesPath();
      File file = File(join(dbPath, getDbFileName()));
      bool exists = await file.exists();
      if (!exists) {
        await file.create(recursive: true);
      }
      db = await openDatabase(join(dbPath, getDbFileName()),
          version: dbVersion, onCreate: onCreate, onUpgrade: onUpgrade);
    }
    return db;
  }

  Future onCreate(Database db, int version);
  //版本更新时会使用
  Future onUpgrade(Database db, int oldVersion, int newVersion);
}
class UserDbProvider extends BaseDbProvider {
  static UserDbProvider _instance;
  Database _db;

  factory UserDbProvider() {
    if (_instance == null) {
      _instance = UserDbProvider._();
    }
    return _instance;
  }

  static UserDbProvider get instance => UserDbProvider();

  UserDbProvider._();

  Future<bool> _openDb() async {
    _db = await getDb(_db, 1);
    return Future.value(true);
  }

  @override
  String getDbFileName() {
    return 'user.db';
  }

  @override
  Future onCreate(Database db, int version) async {
    await db.execute('''
    CREATE TABLE IF NOT EXISTS 'user' (
      ID TEXT,
      Level TEXT,
      Name TEXT)
      ''');
  }

  @override
  Future onUpgrade(Database db, int oldVersion, int newVersion) async {
    await db.execute("DROP TABLE 'user'");
    await onCreate(db, newVersion);
  }

  Future updateUsers(List<User> bucket) async {
    await _openDb();
    Batch batch = _db.batch();
    bucket.forEach((element) {
      batch.update("'user'", element.toJson(),
          where: "Level = ?",
          whereArgs: ["${element.level}"],
          conflictAlgorithm: ConflictAlgorithm.replace);
    });
    return batch.commit();
  }
}

以上两个步骤,便是一个简单的数据库层使用示例。

附注,

对于sql的使用,我们也可以灵活的自己进行拼接,需要注意的是,拼接sql时,表名,以及字段对应的条件value,需要使用单引号:

await _openDb();
String sql ="SELECT * FROM 'user' WHERE ID = '1'";
List list = await _db.rawQuery(sql);
上一篇下一篇

猜你喜欢

热点阅读