Flutter 之 sqflite

直接上代码吧:

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

class DataBase {

  static final DataBase _instance = new DataBase.internal();
  factory DataBase() => _instance;

  static Database _db;

  String _dbName = 'mydb.db';

  Future<Database> get db async {
    if (_db != null) {
      return _db;
    }
    _db = await initDb();
    return _db;
  }

  DataBase.internal();

  //初始化数据库,根据路径版本号新建数据库
  initDb() async {
   // Directory directory = await getApplicationDocumentsDirectory();
    String p = await getDatabasesPath();
    String path = join(p, _dbName);
    var dataBase = await openDatabase(path, version: 1, onCreate: _onCreate);
    print('数据库创建成功,version: 1');
    return dataBase;
  }
  
  _onCreate(Database db, int version) async {
    // When creating the db, create the table
    await db.execute('CREATE TABLE Test (id INTEGER PRIMARY KEY, '
        'name TEXT, '
        'value INTEGER, '
        'num REAL)');
    print("创建表成功!");
  }

  
  closeDB() {
    if (_db != null || _db.isOpen) {
      _db.close();
      _db = null;
      print("关闭成功!");
    }
  }

  insert() async {

    var dbClient = await db;

    await dbClient.transaction((txn) async {
      int id1 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
      print('inserted1: $id1');
      int id2 = await txn.rawInsert(
          'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
          ['another name', 12345678, 3.1416]);
      print('inserted2: $id2');
    });
  }

  query() async {

    var dbClient = await db;

    List<Map> list = await dbClient.rawQuery('SELECT * FROM Test');

  //  print(_db.path);

   // print(list);

//    for(int i = 0; i < list.length; i++)
//      print(list[i]['name']);

    return list;
  }
}

以下代码是在 StatefulWidget 的 State 中使用数据库的小示例:

猜你喜欢

转载自blog.csdn.net/M_zoneL/article/details/86628423