Ошибка SQL-запроса в Dart
Синтаксическая ошибка или обращение к несуществующей
таблице приводят к исключению. Пакет sqlite3
не проверяет SQL заранее, поэтому сбой виден только
при выполнении.
Неверное имя таблицы в SELECT оборачивают
в try и обрабатывают отдельно от успешного
пути:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('bad_sql.db');
try {
db.select('SELECT id FROM missing_table');
} on SqliteException catch (ex) {
print(ex.message);
}
db.dispose();
Опечатка в ключевом слове тоже дает исключение. Сообщение можно залогировать, не прерывая весь процесс:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('bad_sql.db');
db.execute('''
CREATE TABLE IF NOT EXISTS probes (
id INTEGER PRIMARY KEY
)
''');
try {
db.execute('INSER INTO probes DEFAULT VALUES');
} on SqliteException catch (ex) {
print('failed');
print(ex.message);
}
db.dispose();
Откройте safe.db и выполните выборку
из ghost_rows в try. При
ошибке выведите "no table".
Создайте таблицу samples и намеренно
отправьте запрос с опечаткой в UPDATE.
Выведите текст сообщения исключения.