我没有成功捕获抛出数据库异常的sqflite SQL错误。注意:它是Future和async。
示例代码
Future<String> getData() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, globals.databaseName);
Database db = await openDatabase(path);
List results = await db.rawQuery("mal formed example of sql on purpose");
}
当我运行上面的代码时,rawQuery会抛出有目的的错误SQL。控制台显示:
E/SQLiteLog( 7908): (1) near "mal": syntax error
我想要做的是能够捕获SQL错误并处理它们。
我已经尝试了.then和.catchError - 但没有让它发挥作用。
从我所读过的内容来看,正常的尝试{} catch {}并不适用于Futures。 (我确实试着开始......而且它没有用)。
try {
List results = await db.rawQuery("mal formed example of sql on purpose");
} catch (e) {
print(e);
}
导致同样的错误:
E/SQLiteLog( 3148): (1) near "mal": syntax error
答案 0 :(得分:1)
通过升级到最新版本(不知道在报告的问题中使用了哪个版本)来解决问题:https://github.com/tekartik/sqflite/issues/17
SQLException(iOS和Android)传播到Dart,并且在使用async / await时可以使用try / catch作为DatabaseException捕获,如此处的测试所示:https://github.com/tekartik/sqflite/blob/master/example/lib/exception_test_page.dart#L89-L94