Проверьте, созданы ли таблица и данные в SQLlite - PullRequest
0 голосов
/ 20 октября 2019

Как проверить созданные таблицы и базу данных? Я получаю сообщение о том, что нет таблицы.

Произошло исключение. SqfliteDatabaseException (DatabaseException (Ошибка домена = код FMDatabase = 1 "нет такой таблицы: addCash" UserInfo = {NSLocalizedDescription = нет такой таблицы: addCash}) sql 'SELECT * FROM addCash' args []})

class DBProvider {
  DBProvider._();

  static final DBProvider db = DBProvider._();
  Database _database;

  Future<Database> get database async {
    if (_database != null) {
      return _database;
    }

    _database = await initDB();
    return _database;
  }

  initDB() async {
    Directory documentsDir = await getApplicationDocumentsDirectory();
    String path = join(documentsDir.path, 'app.db');

    return await openDatabase(path, version: 1, onOpen: (db) async {},
        onCreate: (Database db, int version) async {

      await db.execute('''
                CREATE TABLE addCash(
                    id INTEGER PRIMARY KEY,
                    contents TEXT DEFAULT ''
                )
            ''');
    });
  }

  newAddCash(AddCash addCash) async {
    final db = await database;
    var res = await db.insert('addCash', addCash.toJson());

    return res;
  }

  getAddCashx() async {
    final db = await database;
    var res = await db.query('addCash'); // ERROR IS HERE
    List<AddCash> addCash = res.isNotEmpty
        ? res.map((addCash) => AddCash.fromJson(addCash)).toList()
        : [];

    return addCash;
  }

  getAddCash(int id) async {
    final db = await database;
    var res = await db.query('addCash', where: 'id = ?', whereArgs: [id]);

    return res.isNotEmpty ? AddCash.fromJson(res.first) : null;
  }

  updateAddCash(AddCash addCash) async {
    final db = await database;
    var res = await db.update('addCash', addCash.toJson(),
        where: 'id = ?', whereArgs: [addCash.id]);

    return res;
  }

  deleteAddCash(int id) async {
    final db = await database;

    db.delete('addCash', where: 'id = ?', whereArgs: [id]);
  }
}

1 Ответ

0 голосов
/ 20 октября 2019

См. этот ответ о метаданных схемы для получения подробной информации о запросах к таблице sqlite_master.

В качестве альтернативы, откройте базу данных с помощью стороннего инструмента управления базами данных . .. очень полезен для выполнения всех видов подготовки базы данных, проверки, проверки, тестирования SQL и т. д.

В противном случае протестируйте его, используя запрос SELECT, как вы уже сделали. Если он возвращает ошибку, то, очевидно, таблица отсутствует. Достаточно ли у вас обработки исключений для сообщения об ошибках из функции onCreate? onCreate должно работать для новых баз данных, но, возможно, вы открываете базу данных, которая была создана до этой работы, поэтому схема не определена? (onCreate не вызывается, если база данных уже существует.)

Существуют различные другие методы отладки, которые вы можете использовать, которые не демонстрирует ваш код, такие как ведение журнала, трассировка, обработка исключений и т. Д. Возможно, вы делаетееще много вещей, чтобы собрать информацию о том, как работает ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...