检查是否在SQLlite中创建了表和数据表

时间:2019-10-20 00:05:47

标签: sqlite flutter

如何检查我创建的表和数据库? 我收到一个错误消息,说没有桌子。

发生异常。 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 :(得分:0)

有关查询sqlite_master表的详细信息,请参见this answer about schema metadata

或者,使用第三方数据库管理工具打开数据库 ...对于进行各种数据库准备,验证,检查,测试SQL等非常有用。

否则,就像您已经进行的那样,使用SELECT查询对其进行测试。如果返回错误,则表显然丢失。您是否有足够的异常处理程序来报告onCreate函数中的错误? onCreate应该适用于新数据库,但是也许您正在打开在该数据库之前创建的数据库,因此未定义架构? (如果数据库已经存在,则不会调用onCreate。)

您可以使用代码无法展示的其他各种调试技术,例如日志记录,跟踪,异常处理等。您可能需要做更多的事情来收集有关代码运行方式的信息。