Flutter - Modify Sqlite table without deleting database

Viewed 10157

I am using Sqlite database in Flutter by using sqflite plugin. Following the below mentioned links I am able to successfully create database and perform CRUD operations in it.

Sqflite Plugin

Sqflite Tutorial - Youtube Playlist

The problem is, Once the database is created I cannot modify old tables. In order to get a new column in "tabEmployee" table, I must delete the database and recreate it.

void _onCreate(Database db, int newVersion) async {
    await db.execute(
        "CREATE TABLE tabEmployee($idPk INTEGER PRIMARY KEY, employeeName TEXT)");
  }

What should I do in order to modify previously created table in sqflite without deleting database ?

1 Answers

Well I managed to resolve my issue. With some help from dlohani comment and How to add new Column to Android SQLite Database link.

I created a new method "_onUpgrade" and call it as parameter of "openDatabase" and changed the version number. Following is my relevant code:

initDb() async {
    Directory documentDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentDirectory.path, 'maindb.db');
    var ourDb = await openDatabase(path, version: 2, onCreate: _onCreate, onUpgrade: _onUpgrade);
    return ourDb;
  }

  // UPGRADE DATABASE TABLES
  void _onUpgrade(Database db, int oldVersion, int newVersion) {
    if (oldVersion < newVersion) {
      db.execute("ALTER TABLE tabEmployee ADD COLUMN newCol TEXT;");
    }
  }
Related