После изменения таблицы sqflite приложение будет аварийно завершено - PullRequest
0 голосов
/ 21 мая 2019

Я добавил новый столбец в базу данных sqflite. После этого я не могу использовать свое приложение при обновлении приложения. Я должен удалить и переустановить. Как справиться с такой ситуацией?

class HelperDatabase1 {
  static final HelperDatabase1 _instance = HelperDatabase1.internal();

  factory HelperDatabase1() => _instance;
  static Database _db;

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

  HelperDatabase1.internal();

  initDb() async {
    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, "HelperDatabase.db");
    var theDb = await openDatabase(path, version: 2, onCreate: _onCreate);
    return theDb;
  }

  void _onCreate(Database db, int version) async {
await db.execute("CREATE TABLE GetUserPreferenceTable(id INTEGER PRIMARY KEY AUTOINCREMENT, data INTEGER)");
}

в моем main.dart

var helper;

void main() async {
  // debugPaintSizeEnabled=false;
  helper =
  await HelperDatabase1(); 

1 Ответ

0 голосов
/ 21 мая 2019

Не видя вашей конкретной ошибки, вполне вероятно, что вам нужно увеличить номер версии базы данных в методе openDatabase () , чтобы уведомить об изменении схемы.

Например, еслиВы используете код, подобный следующему, для создания своей базы данных, вы бы увеличили версию с 1 до 2:

createDatabase() async {
  String databasesPath = await getDatabasesPath();
  String dbPath = join(databasesPath, 'my.db');

  var database = await openDatabase(dbPath, version: 2, onCreate: populateDb);
  return database;
}
...