【问题标题】:Check if table and datable are created in SQLlite检查是否在 SQLite 中创建了表和数据库
【发布时间】:2019-10-20 00:05:47
【问题描述】:

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

发生了异常。 SqfliteDatabaseException (DatabaseException(Error Domain=FMDatabase Code=1 "no such table: addCash" UserInfo={NSLocalizedDescription=no such table: 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]);
  }
}

【问题讨论】:

    标签: sqlite flutter


    【解决方案1】:

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

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

    否则,就像您已经做过的那样,使用 SELECT 查询对其进行测试。如果它返回错误,则显然该表丢失了。您是否有足够的异常处理来报告 onCreate 函数中的错误? onCreate 应该适用于新数据库,但也许您正在打开一个在该工作之前创建的数据库,所以它没有定义模式? (如果数据库已经存在,则不会调用onCreate。)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-03
      • 2011-03-04
      • 2017-10-21
      • 2017-04-22
      • 2011-01-14
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多