Как вставить случайное количество значений в разные столбцы? querys. C ++. База данных SQlite - PullRequest
0 голосов
/ 03 мая 2018

В моей базе данных у меня есть таблица под названием «история» с 3 столбцами (расстояние1, расстояние2, расстояние3)

Я упросту то, что у меня есть в коде:

У меня есть вектор "Ldist", который каждый раз имеет разное количество расстояний. Иногда 1 расстояние, или 2, или 3. Обычно я знаю, сколько он будет иметь, и я работаю так:

(пример: если я знаю, что вектор будет иметь 2 расстояния)

QSqlQuery qry;
qry.prepare("INSERT INTO history (distance1, distance2) "
        "VALUES (:placeholder0, :placeholder1)");
qry.bindValue(":placeholder0", Ldist.at(0));
qry.bindValue(":placeholder1", Ldist.at(1));
qry.exec();

Моя проблема возникает, когда я не знаю, сколько расстояний будет иметь этот вектор. Как сделать «столбцы affectec» и «необходимые заполнители» доступными для работы со случайным количеством значений в векторе «Ldist»?

Я пытался сделать цикл, но я не знаю, как изменить свой код, чтобы приспособиться к тому, что мне нужно.

Спасибо за совет.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Спасибо acraig5075 !! <3 </p>

Я узнал, что вы можете использовать заполнители и для столбцов. Я этого не знал. Намного проще, если мы знаем, что ^^

Вот как я допустил мой код:

QString column; QSqlQuery qry;

for (c=0; c < Ldist.size(); c++)
{  
     column = QString("dist%1").arg(c+1);    

     qry.prepare("INSERT INTO history (:placeholder0) VALUES (:placeholder1)");
     qry.bindValue(":placeholder0",column);
     qry.bindValue(":placeholder1",Ldist.at(c));
     qry.exec();
     }
0 голосов
/ 03 мая 2018

Вы правы, что нужен цикл. Как то так (не проверено)

if (!Ldist.empty())
{
    QString columns, values;

    for (size_t i = 0; i < std::min(3, Ldist.size()); ++i)
    {
        columns += QString("distance%1,").arg(i + 1);
        values += QString(":placeholder%1,").arg(i);
    }

    // trim trailing comma
    columns.remove(columns.length() - 1, 1);
    values.remove(values.length() - 1, 1);

    QString queryStr = QString("INSERT INTO history (%1) VALUES (%2)").arg(columns, values);

    QSqlQuery qry(queryStr);

    for (size_t i = 0; i < std::min(3, Ldist.size()); ++i)
    {
        QString placeHolder = QString(":placeholder%1,").arg(i);
        qry.bindValue(placeHolder, Ldist.at(i));
    }

    qry.exec();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...