如何检查我创建的表和数据库? 我收到一个错误消息,说没有桌子。
发生异常。 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]);
}
}
答案 0 :(得分:0)
有关查询sqlite_master
表的详细信息,请参见this answer about schema metadata。
或者,使用第三方数据库管理工具打开数据库 ...对于进行各种数据库准备,验证,检查,测试SQL等非常有用。
否则,就像您已经进行的那样,使用SELECT查询对其进行测试。如果返回错误,则表显然丢失。您是否有足够的异常处理程序来报告onCreate
函数中的错误? onCreate
应该适用于新数据库,但是也许您正在打开在该数据库之前创建的数据库,因此未定义架构? (如果数据库已经存在,则不会调用onCreate
。)
您可以使用代码无法展示的其他各种调试技术,例如日志记录,跟踪,异常处理等。您可能需要做更多的事情来收集有关代码运行方式的信息。