Как создать несколько таблиц в базе данных в sqflite? - PullRequest
0 голосов
/ 22 января 2019

Я строю и приложение с флаттером, который использует базу данных 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)''');
}

Таблица создана, и я могу получить к ней доступ без проблем.

К сожалению, я не могу включить более 1 таблицы, которую я только что создал. Я попытался добавить еще одно предложение SQL CREATE TABLE в тот же метод и повторил метод db.execute с другим предложением SQL только в следующей строке.

Я имитирую код из этого урока: https://www.youtube.com/watch?v=xke5_yGL0uk

Как добавить другую таблицу в той же базе данных?

Ответы [ 5 ]

0 голосов
/ 31 июля 2019

Вы можете использовать файл .sql, содержащий ваш скрипт БД.

Сначала добавьте файл сценария в ресурсы.

Затем импортируйте следующие пакеты:

import 'package:path/path.dart';

import 'package:sqflite/sqflite.dart';

import 'package:flutter/services.dart' show rootBundle;

наконец, используйте следующий код

void _createDb() async 
{
      final database = openDatabase( join( await getDatabasesPath(), 'mydb.db'),
      onCreate: (db, version) async  
      {
          // call database script that is saved in a file in assets
          String script =  await rootBundle.loadString("assets\\db\\script.sql");
          List<String> scripts = script.split(";");
          scripts.forEach((v) 
          {
              if(v.isNotEmpty ) 
              {
                   print(v.trim());
                   db.execute(v.trim());
              }
          });
       },
       version: 1,
       );
}
0 голосов
/ 17 июля 2019

да, вы можете сделать это

 void _createDb(Database db, int newVersion) async {
 await db.execute('''
   create table $carTable (
    $columnCarId integer primary key autoincrement,
    $columnCarTitle text not null
   )''');
 await db.execute('''
   create table $userTable(
    $userId integer primary key autoincrement,
    $name text not null
   )''');
  }

но чтобы ускорить процесс, давайте предположим, что у нас есть 10 таблиц, вы можете использовать пакет таким образом

void _createDb(Database db, int newVersion) async {
Batch batch = db.batch();
batch.execute("Your query-> Create table if not exists");
batch.execute("Your query->Create table if not exists");
List<dynamic> res = await batch.commit();
//Insert your controls
}
0 голосов
/ 01 марта 2019

Вы можете просто объединить несколько вызовов db.execute для примера

await db.execute('''
      create table $reminderTable (
        $columnReminderId integer primary key autoincrement,
        $columnReminderCarId integer not null,
        $columnReminderName text not null,
        $columnReminderNotifyMileage integer not null,
        $columnReminderEndMileage integer not null
       )''');
await db.execute('''
       create table $carTable (
        $columnCarId integer primary key autoincrement,
        $columnCarTitle text not null
       )''');
0 голосов
/ 13 мая 2019

Изменить имя файла DB.Это «перезагрузит» вашу БД, и создание будет работать.

например:

final dabasesPath = await getDatabasesPath(); 
final path = join(dabasesPath, "newName2.db");
0 голосов
/ 04 февраля 2019

Трудно сказать, не увидев ваш openDatabase звонок и не существует ли база данных раньше или нет.Одно из моих предположений заключается в том, что вы все еще используете ту же версию базы данных.Как только onCreate был вызван, он больше никогда не будет вызван.Вы должны попытаться увеличить версию вашей базы данных и добавить новую таблицу на onUpgrade

...