Is there a way to check the database version in a flutter app using sqflite?

前端 未结 1 1013
挽巷
挽巷 2021-01-06 23:27

I am pretty new to flutter and I have some questions about how database version control works for these apps with sqflite.

I have made a database file in my assets

相关标签:
1条回答
  • 2021-01-07 00:02

    SQFlite has already a built-in version management, but it will work only if you have a migration script. For what you've said that's probably not your case. You'll need to manage your version control by hand:

        class DbHelper {
          static const NEW_DB_VERSION = 2;
    
          static final DbHelper _instance = DbHelper.internal();
    
          factory DbHelper() => _instance;
    
          DbHelper.internal();
    
          Database _db;
    
          Future<Database> get db async {
            if (_db != null) {
              return _db;
            } else {
              _db = await initDb();
              return _db;
            }
          }
    
          Future<Database> initDb() async {
    
            final databasesPath = await getDatabasesPath();
            final path = join(databasesPath, "database.db");
    
            var db = await openDatabase(path);
    
            //if database does not exist yet it will return version 0
            if (await db.getVersion() < NEW_DB_VERSION) {
    
              db.close();
    
              //delete the old database so you can copy the new one
              await deleteDatabase(path);
    
              try {
                await Directory(dirname(path)).create(recursive: true);
              } catch (_) {}
    
              //copy db from assets to database folder
              ByteData data = await rootBundle.load("assets/databases/database.db");
              List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
              await File(path).writeAsBytes(bytes, flush: true);
    
              //open the newly created db 
              db = await openDatabase(path);
    
              //set the new version to the copied db so you do not need to do it manually on your bundled database.db
              db.setVersion(NEW_DB_VERSION);
    
            }
    
            return db;
          }
        }
    
    
    0 讨论(0)
提交回复
热议问题