Как я могу вставить данные внутри круглых скобках? 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"]);
→ Ссылка