如何在Dart / Flutter中捕获sqflite DatabaseException

时间:2018-01-03 22:03:25

标签: dart flutter

我没有成功捕获抛出数据库异常的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

1 个答案:

答案 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