Flutter Desktop 读取本地assets目录下的数据库(.db)文件

码影星云客
• 阅读 2404

一、添加第三方库

flutter pub add sqflite_common_ffi

二、在pubspec.yaml中配置assets

注意格式

assets:
  - assets/xxx.db

三、初始化数据库
项目初始化以后会从根目录下的.dart_tool/sqflite_common_ffi/databases/xxx.db读取数据库文件,如果没有则把assets目录下的拷贝到该目录下。

  initialDatabase() async {
    sqfliteFfiInit();
    var databaseFactory = databaseFactoryFfi;
    var databasesPath = await databaseFactory.getDatabasesPath();

    var path = join(databasesPath, "express.db");

    print(path);
    var exists = await databaseFactory.databaseExists(path);

    if (!exists) {
      // Should happen only the first time you launch your application
      print("Creating new copy from asset");

      try {
        await Directory(dirname(path)).create(recursive: true);
      } catch (_) {}
      // Copy from asset
      ByteData data = await rootBundle.load('assets/express.db');
      print(join('assets','express.db'));
      // ByteData data = await rootBundle.load(join('assets','express.db'));
      List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
      // Write and flush the bytes written
      await File(path).writeAsBytes(bytes, flush: true);
    } else {
      print("Opening existing database");
    }
    // open the database
    this._db = await databaseFactory.openDatabase(path);
    print(databasesPath);
  }

四、查询数据

  // 查询
  Future<List<UnitPrice>> queryPrice() async {
    List<UnitPrice> priceList = [];
    var result = await _db.query(table_name, where: 'id = ?', whereArgs: [1]);
    return priceList;
  }
点赞
收藏
评论区
推荐文章
顺心 顺心
4年前
Flutter如何引用第三方库并使用
Flutter官网点击访问(https://link.jianshu.com/?thttps%3A%2F%2Fflutter.io)如何引用并安装第三方库pubspec.yaml管理第三方库在pubspec.yaml中添加第三方库名称及版本号。例如添加第三方库english_wordsdependencies:flut
CuterCorley CuterCorley
4年前
Android开发 经验技巧汇总(基于Android Studio)(二)
1.复制Assets文件到手机SD卡assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。先在Activity里面调用getAssets()来获取AssetManager引用;再用AssetManager的open(StringfileName,intaccessMode)方法则指定
CuterCorley CuterCorley
4年前
Android开发 经验技巧汇总(基于Android Studio)(二)
1.复制Assets文件到手机SD卡assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。先在Activity里面调用getAssets()来获取AssetManager引用;再用AssetManager的open(StringfileName,intaccessMode)方法则指定
浩浩 浩浩
4年前
【Flutter实战】资源管理
2.4资源管理FlutterAPP安装包中会包含代码和 assets(资源)两部分。Assets是会打包到程序安装包中的,可在运行时访问。常见类型的assets包括静态数据(例如JSON文件)、配置文件、图标和图片(JPEG,WebP,GIF,动画WebP/GIF,PNG,BMP和WBMP)等。指定assets和包管理一样,Flutter
Stella981 Stella981
3年前
Flutter接入现有iOS工程(混编)、开发调试、打包发布精简教程
本教程是在xcode11.1、cocospod1.7.5、flutter1.10.15pre.115下完成的。    1.安装flutter    按照官网的教程,一步一步来,没什么好说的。https://flutterchina.club/setupmacos/(https://ww
Stella981 Stella981
3年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Easter79 Easter79
3年前
TiDB Pre
8月30日,TiDB发布PreGA版。该版本对MySQL兼容性、SQL优化器、系统稳定性、性能做了大量的工作。TiDB:SQL查询优化器调整代价模型优化索引选择,支持不同类型字段比较的索引选择支持基于贪心算法的JoinReorder
Stella981 Stella981
3年前
Jenkins配置下拉菜单联动效果
  在使用Jenkins集成时,经常需要配置一些环境信息,由于测试、线上、预发布需要切换环境和域名,需要在Jenkins中配置下拉菜单联动效果。  首先选择参数化构建过程,然后首先配置环境,环境分为:测试环境、预发布环境、正式环境,选择的组件为ChoiceParameter,Name定义为environment,选项为test、pre、onli
Stella981 Stella981
3年前
Pre
PAT甲级1119,我先在CSDN上面发布的这篇文章:https://blog.csdn.net/weixin\_44385565/article/details/89737224(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fweixin_443855
Stella981 Stella981
3年前
PlayScala 2.5.x
1.通过routes文件定义GET/favicon.icocontrollers.Assets.at(path"/public",file"favicon.ico")GET/assets/filecontrollers.Assets.versioned(path"/public
Stella981 Stella981
3年前
Django之常用配置
<h1在其它文件导入及变量命名注意事项</h1变量命名:必须都大写<preclass'brush:python'fromdjango.confimportsettings</pre<h1静态文件夹配置</h1比如需要引入jquery、bootstrap等文件,需要配置静态文件,步骤如下:步骤一、在<项目名称目录下新建
码影星云客
码影星云客
Lv1
少年易学老难成,一寸光阴不可轻。
文章
3
粉丝
0
获赞
0