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
同じデータベース内に別のテーブルを追加するにはどうすればよいですか?
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()メソッドでデータベースのバージョンを上げる必要があります。アップグレードが呼び出されるように、それ以外の場合は呼び出されません。