Я использую SOCI для доступа к базе данных PostgreSQL. Одна конкретная таблица, в которую я вставляю и выбираю, имеет (в настоящее время) 72 столбца. Мой вопрос: как лучше всего справиться с таким количеством столбцов?
Я определил, что для выбора лучше всего использовать динамический набор результатов SOCI. Таким образом, я могу перебрать столбцы.
Однако для вставки у меня возникли трудности. Чего я хочу добиться, так это:
int vals[NUM_VALS];
statement st = s.prepare << "INSERT INTO table (c0, c1, c2, ...) VALUES (";
for(int i = 0; i < NUM_VALS; ++i)
st << vals[i];
st << ")";
st.execute();
Возможно ли что-нибудь подобное? Мне не повезло найти простой способ справиться с большим количеством столбцов.
Список рассылки SOCI-пользователей дал мне ответ. Требуется отложенное построение объекта выписки. Например, чтобы вышеперечисленное работало, измените его на:
int vals[NUM_VALS];
auto temp = (s.prepare << "INSERT INTO table (c0, c1, c2, ...) VALUES (:c1, :c2, ...)");
for(int i = 0; i < NUM_VALS; ++i)
temp , into(vals[i]);
statement st(temp).execute();
Других решений пока нет …