Параметры SQL-запроса в Dart
Склеивать пользовательский текст в SQL небезопасно.
В тексте запроса оставляют места ?, а значения
передают вторым аргументом execute или
select списком в том же порядке.
Шаблон с ? готовят один раз, затем вызывают
его с разными списками параметров:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('slots.db');
db.execute('''
CREATE TABLE IF NOT EXISTS slots (
id INTEGER PRIMARY KEY,
code TEXT NOT NULL,
capacity INTEGER NOT NULL
)
''');
db.execute(
'INSERT INTO slots (code, capacity) VALUES (?, ?)',
['A1', 12],
);
print(db.updatedRows);
db.dispose();
Тот же текст SQL можно выполнить с другими аргументами:
достаточно снова вызвать execute или
select с новым списком:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('slots.db');
db.execute(
'INSERT INTO slots (code, capacity) VALUES (?, ?)',
['B2', 8],
);
db.execute(
'INSERT INTO slots (code, capacity) VALUES (?, ?)',
['C3', 20],
);
db.dispose();
Создайте таблицу crates в dock.db
и добавьте строку с меткой "K9" и весом
15 через шаблон с двумя ?.
Добавьте еще одну строку с меткой "L1"
и весом 22 тем же шаблоном без
пересборки SQL-текста.