Как я могу вставить данные внутри круглых скобках? Dart
Есть входные данные:
String SQL = "INSERT INTO table () VALUES ()";
List data1 = ['user_id', 'user_name'];
List data1 = ['1', 'test']
Как я могу получить
INSERT INTO table (user_id, user_name) VALUES (1, test)
Спасибо.
Ответы (1 шт):
Способ №0. Конкатенация.
Дедовский способ. Простой как тапок.
Просто берешь и складываешь строку из разных составляющих.
Cамый НЕэлегантный способ, но пользоваться им уметь должен каждый, потому что порой могут быть ситуации когда выручить может только он из-за того что в зависимости от условий у строки может быть совершенно разный состав.
void main() {
List fields = ['user_id', 'user_name'];
List values = ['1', 'test'];
String SQL = "INSERT INTO table (" + fields.join(", ") + ") VALUES (" + values[0] +" , \"" + values[1] + "\");";
print(SQL);
}
Если Вы пытаетесь сами строить запросы с переменным количеством полей(чего я не советую), то это ваш выбор
Способ №1. Интерполяция.
Интерполяция строк - это процесс вычисления строкового литерала , содержащего один или несколько заполнителей , дающий результат в котором заполнители заменяются соответствующими значениями. Это форма простой обработки шаблона или, формально, форма квазицитирования (или интерпретация логической подстановки ). Интерполяция строк обеспечивает более простое и интуитивно понятное форматирование строк и спецификацию содержимого по сравнению со строкой конкатенацией .
Если проще, то Вы можете подставлять значения переменных непосредственно в строковый литерал используя выражение ${}, внутрь которого можно вставить переменную или вычисляемое значение.
void main() {
List fields = ['user_id', 'user_name'];
List values = ['1', 'test'];
String SQL = "INSERT INTO table (${fields[0]}, ${fields[1]}) VALUES (${values[0]}, \"${values[1]}\");";
print(SQL);
}
Результат:
INSERT INTO table (user_id, user_name) VALUES (1, "test");
Способ №2. Правильный. Форматирование встроенными средствами.
Самый верный способ - это подготвка запросов с помощью встроенных метов различных адаптеров для работы с базами данных.
Данные методы помогут:
- отформатировать значения полей в соответствии с их типами (в противном случае вы будете постоянно забывать закавычить строки и будете постоянно получать ошибки)
- экранировать специальные символы и пр.
И они достаточно просты в использовании:
db.rawQuery("INSERT INTO table (?,?) VALUES (?,?)", ["user_id", "user_name", 1, "test"]);

