web-dev-qa-db-ja.com

sqfliteのデータベースに複数のテーブルを作成するにはどうすればよいですか?

SQLiteデータベースを使用するフラッター付きのビルドとアプリです。私はこのコードを使用して最初のテーブルを作成しました:

 void _createDb(Database db, int newVersion) async {
    await db.execute('''CREATE TABLE cards (id_card INTEGER PRIMARY KEY, 
         color TEXT, type TEXT, rarity TEXT, name TEXT UNIQUE, goldCost INTEGER,
         manaCost INTEGER, armor INTEGER, attack INTEGER, health INTEGER, description TEXT)''');
}

テーブルが作成され、問題なくアクセスできます。

残念ながら、作成したばかりのテーブルを複数含めることはできません。同じメソッドに別のSQL CREATE TABLE句を追加し、次の行だけで別のSQL句を使用してメソッドdb.executeを繰り返してみました。

このチュートリアルのコードを模倣しています: https://www.youtube.com/watch?v=xke5_yGL0uk

同じデータベース内に別のテーブルを追加するにはどうすればよいですか?

9
filiard

openDatabase(path、onCreate、version)では、1つ以上のオプションのパラメーター "onUpgrade"を使用して、ドロップを定義し、テーブルスクリプトを再度作成します。また、パラメーターのバージョンを1つずつアップグレード(増加)します。

-----コードスニペット------

openDatabase(path, onCreate:_createDb, onUpgrade: onUpgrade,version:_DB_VERSION);
...
...

    _onUpgrade( Database db, int oldVersion, int newVersion ) async {

    Batch batch = db.batch();

    // drop first

    batch.execute("DROP TABLE IF EXISTS $_TABLE_3 ;");

    batch.execute("DROP TABLE IF EXISTS $_TABLE_2 ;");
    batch.execute("DROP TABLE IF EXISTS $_TABLE_1 ;");
    // then create again
    batch.execute("CREATE TABLE $TABLE_1 ...... ");
    batch.execute("CREATE TABLE $TABLE_2 ...... ");
    batch.execute("CREATE TABLE $TABLE_3 ...... ");
    List<dynamic> result = await batch.commit();

}

注:テーブルの構造を作成または変更するたびに、openDatabase()メソッドでデータベースのバージョンを上げる必要があります。アップグレードが呼び出されるように、それ以外の場合は呼び出されません。

0
Ajay Kotiyal